connectorSettingsToUse = new ConnectorSettings.Builder().createFrom(connectorSettings).putConfiguredProperty("specification", specification).build();
@Test public void shouldProvideInfoAboutAppliedConnectorSettings() { final CustomConnectorHandler handler = new CustomConnectorHandler(dataManager, applicationContext, iconDao); final ConnectorGenerator connectorGenerator = mock(ConnectorGenerator.class); final ConnectorTemplate template = new ConnectorTemplate.Builder().build(); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder().connectorTemplateId("connector-template").build(); final ConnectorSummary preparedSummary = new ConnectorSummary.Builder().build(); when(dataManager.fetch(ConnectorTemplate.class, "connector-template")).thenReturn(template); when(applicationContext.getBean("connector-template", ConnectorGenerator.class)).thenReturn(connectorGenerator); when(connectorGenerator.info(same(template), same(connectorSettings))).thenReturn(preparedSummary); final ConnectorSummary info = handler.info(connectorSettings); assertThat(info).isSameAs(preparedSummary); }
@SuppressWarnings("PMD.JUnitTestContainsTooManyAsserts") public void shouldGenerateAsExpected() throws IOException { final ConnectorSettings connectorSettings = new ConnectorSettings.Builder()// .putConfiguredProperty("specification", specification)// .build();
new ConnectorSettings.Builder()// .connectorTemplateId("connector-template-id")// .name("new connector")// .description("new connector description")// .icon("new connector icon")// .putConfiguredProperty("prop1", "value1")// .putConfiguredProperty("unknown-prop", "unknown-value")// .build());
new ConnectorSettings.Builder()// .connectorTemplateId("connector-template-id")// .name("new connector")// .description("new connector description")// .icon("new connector icon")// .putConfiguredProperty("prop1", "value1")// .putConfiguredProperty("unknown-prop", "unknown-value")// .build());
@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); } }
@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 shouldThrowEntityNotFoundIfNoConnectorTemplateExists() { assertThatThrownBy(() -> new CustomConnectorHandler(dataManager, applicationContext, iconDao).create(// new ConnectorSettings.Builder().connectorTemplateId("non-existent").build())// ).isInstanceOf(EntityNotFoundException.class).hasMessage("Connector template: non-existent"); }
@Test public void shouldThrowEntityNotFoundIfNoConnectorTemplateExists() { assertThatThrownBy(() -> new CustomConnectorHandler(dataManager, applicationContext, iconDao).create(// new ConnectorSettings.Builder().connectorTemplateId("non-existent").build())// ).isInstanceOf(EntityNotFoundException.class).hasMessage("Connector template: non-existent"); }
@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"); }
@Test public void shouldProvideInfoAboutAppliedConnectorSettings() { final CustomConnectorHandler handler = new CustomConnectorHandler(dataManager, applicationContext, iconDao); final ConnectorGenerator connectorGenerator = mock(ConnectorGenerator.class); final ConnectorTemplate template = new ConnectorTemplate.Builder().build(); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder().connectorTemplateId("connector-template").build(); final ConnectorSummary preparedSummary = new ConnectorSummary.Builder().build(); when(dataManager.fetch(ConnectorTemplate.class, "connector-template")).thenReturn(template); when(applicationContext.getBean("connector-template", ConnectorGenerator.class)).thenReturn(connectorGenerator); when(connectorGenerator.info(same(template), same(connectorSettings))).thenReturn(preparedSummary); final ConnectorSummary info = handler.info(connectorSettings); assertThat(info).isSameAs(preparedSummary); }
@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(); }