@POST @Path("/info") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) @ApiOperation("Provides a summary of the connector as it would be built using a ConnectorTemplate identified by the provided `connector-template-id` and the data given in `connectorSettings`") public ConnectorSummary info(@MultipartForm final CustomConnectorFormData connectorFormData) { try { final String specification; try (BufferedSource source = Okio.buffer(Okio.source(connectorFormData.getSpecification()))) { specification = source.readUtf8(); } final ConnectorSettings connectorSettings = new ConnectorSettings.Builder() .createFrom(connectorFormData.getConnectorSettings()) .putConfiguredProperty("specification", specification) .build(); return withGeneratorAndTemplate(connectorSettings.getConnectorTemplateId(), (generator, template) -> generator.info(template, connectorSettings)); } catch (IOException e) { throw SyndesisServerException.launderThrowable("Failed to read specification", e); } }
connectorSettingsToUse = new ConnectorSettings.Builder().createFrom(connectorSettings).putConfiguredProperty("specification", specification).build();
@Test public void shouldReportErrorsFromInvalidPetstoreSwagger() throws IOException { final String specification = resource("/swagger/invalid/invalid-scheme.petstore.swagger.json"); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder()// .putConfiguredProperty("specification", specification)// .build(); final ConnectorSummary summary = generator.info(SWAGGER_TEMPLATE, connectorSettings); assertThat(summary.getErrors()).hasSize(1); assertThat(summary.getWarnings()).isEmpty(); }
.putConfiguredProperty("specification", specification)// .build();
.description("new connector description")// .icon("new connector icon")// .putConfiguredProperty("prop1", "value1")// .putConfiguredProperty("unknown-prop", "unknown-value")// .build());
.description("new connector description")// .icon("new connector icon")// .putConfiguredProperty("prop1", "value1")// .putConfiguredProperty("unknown-prop", "unknown-value")// .build());
@Test public void shouldProvideInfoFromPetstoreSwagger() throws IOException { final String specification = resource("/swagger/petstore.swagger.json"); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder()// .putConfiguredProperty("specification", specification)// .build(); final ConnectorSummary summary = generator.info(SWAGGER_TEMPLATE, connectorSettings); final ActionsSummary actionsSummary = new ActionsSummary.Builder().totalActions(20).putActionCountByTag("store", 4) .putActionCountByTag("user", 8).putActionCountByTag("pet", 8).build(); final ConnectorSummary expected = new ConnectorSummary.Builder()// .name("Swagger Petstore")// .actionsSummary(actionsSummary)// .build(); assertThat(summary).isEqualToIgnoringGivenFields(expected, "icon", "description", "properties", "warnings"); assertThat(summary.getIcon()).startsWith("data:image"); assertThat(summary.getDescription()).startsWith("This is a sample server Petstore server"); assertThat(summary.getProperties().keySet()).contains("host", "basePath", "authenticationType", "clientId", "clientSecret", "accessToken", "authorizationEndpoint", "specification"); }
@Test public void shouldCreateBaseConnectors() { final ConnectorSettings settings = new ConnectorSettings.Builder().putConfiguredProperty("property2", "value2").build(); final Connector connector = generator.baseConnectorFrom(template, settings); assertThat(connector).isEqualToIgnoringGivenFields(// new Connector.Builder()// .name("test-name")// .description("test-description")// .connectorGroup(template.getConnectorGroup())// .connectorGroupId("template-group")// .properties(template.getConnectorProperties())// .putConfiguredProperty("property2", "value2")// .build(), "id", "icon"); assertThat(connector.getIcon()).isEqualTo("data:image/svg+xml,dummy"); }
@Test public void shouldCreateBaseConnectorsWithGivenNameAndDescription() { final ConnectorSettings settings = new ConnectorSettings.Builder().name("given-name").description("given-description") .putConfiguredProperty("property2", "value2").build(); final Connector connector = generator.baseConnectorFrom(template, settings); assertThat(connector).isEqualToIgnoringGivenFields(// new Connector.Builder()// .name("given-name")// .description("given-description")// .connectorGroup(template.getConnectorGroup())// .connectorGroupId("template-group")// .properties(template.getConnectorProperties())// .putConfiguredProperty("property2", "value2").build(), "id", "icon"); assertThat(connector.getIcon()).isEqualTo("data:image/svg+xml,dummy"); } }
@Test public void shouldCreateSecurityConfigurationFromReverbSwagger() throws IOException { final String specification = resource("/swagger/reverb.swagger.yaml"); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder()// .name("Reverb API")// .description("Invokes Reverb API")// .icon("fa-music")// .putConfiguredProperty("specification", specification)// .build(); final Connector generated = generator.generate(SWAGGER_TEMPLATE, connectorSettings); assertThat(generated.getProperties().keySet()).contains("accessToken", "authorizationEndpoint", "tokenEndpoint", "clientId", "clientSecret"); assertThat(generated.getProperties().get("authenticationType").getEnum()) .containsExactly(new ConfigurationProperty.PropertyValue.Builder().value("oauth2").label("OAuth 2.0").build()); }
@Test public void shouldIncorporateGivenConfiguredProperties() throws IOException { final String specification = resource("/swagger/reverb.swagger.yaml"); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder()// .name("Reverb API")// .description("Invokes Reverb API")// .icon("fa-music")// .putConfiguredProperty("specification", specification)// .putConfiguredProperty("tokenEndpoint", "http://some.token.url").build(); final Connector connector = generator.generate(SWAGGER_TEMPLATE, connectorSettings); assertThat(connector.getConfiguredProperties()).containsEntry("tokenEndpoint", "http://some.token.url"); }