@GET @Produces(MediaType.APPLICATION_JSON) @Path(value = "/{connectorId}/actions/{actionId}/filters/options") public FilterOptions getFilterOptions(@PathParam("connectorId") @ApiParam(required = true) final String connectorId, @PathParam("actionId") @ApiParam(required = true) final String actionId) { final FilterOptions.Builder builder = new FilterOptions.Builder().addOp(Op.DEFAULT_OPTS); final Connector connector = getDataManager().fetch(Connector.class, connectorId); if (connector == null) { return builder.build(); } connector.actionById(actionId).filter(ConnectorAction.class::isInstance).map(ConnectorAction.class::cast).ifPresent(action -> { action.getOutputDataShape().ifPresent(dataShape -> { final List<String> paths = inspectors.getPaths(dataShape.getKind().toString(), dataShape.getType(), dataShape.getSpecification(), dataShape.getExemplar()); builder.addAllPaths(paths); }); }); return builder.build(); }
@POST @Produces(MediaType.APPLICATION_JSON) @Path(value = "/filters/options") public FilterOptions getFilterOptions(DataShape dataShape) { FilterOptions.Builder builder = new FilterOptions.Builder().addOp(Op.DEFAULT_OPTS); final List<String> paths = inspectors.getPaths(dataShape.getKind().toString(), dataShape.getType(), dataShape.getSpecification(), dataShape.getExemplar()); builder.paths(paths); return builder.build(); }
@Override public DataShape createShapeFromResponse(final String specification, final Swagger swagger, final Operation operation) { final Optional<Response> maybeResponse = findResponse(operation); if (!maybeResponse.isPresent()) { return DATA_SHAPE_NONE; } final DataShape response = createShapeFromProperty(specification, maybeResponse.get().getSchema()); if (response.getKind() == DataShapeKinds.NONE) { return response; } return new DataShape.Builder().createFrom(response).name("Response").description("API response payload").build(); }
@Test public void shouldGenerateValidInputSchemasets() { final DataShape input = generator.createShapeFromRequest(specificationContent, swagger, operation); if (input.getKind() != DataShapeKinds.XML_SCHEMA) { return; } final String inputSpecification = input.getSpecification(); final ValidationResult result = VALIDATOR.validateInstance(source(inputSpecification)); assertThat(result.isValid())// .as("Non valid input XML schemaset was generated for specification: %s, operation: %s, errors: %s", specification, operation.getOperationId(), StreamSupport.stream(result.getProblems().spliterator(), false).map(ValidationProblem::toString)// .collect(Collectors.joining("\n")))// .isTrue(); }
@Test public void shouldGenerateValidOutputSchemasets() throws IOException { final DataShape output = generator.createShapeFromResponse(specificationContent, swagger, operation); if (output.getKind() != DataShapeKinds.XML_SCHEMA) { return; } final Validator validator = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI); try (InputStream in = UnifiedXmlDataShapeGenerator.class.getResourceAsStream("/swagger/atlas-xml-schemaset-model-v2.xsd")) { validator.setSchemaSource(new StreamSource(in)); final String outputSpecification = output.getSpecification(); final ValidationResult result = validator.validateInstance(source(outputSpecification)); assertThat(result.isValid())// .as("Non valid output XML schemaset was generated for specification: %s, operation: %s, errors: %s", specification, operation.getOperationId(), StreamSupport.stream(result.getProblems().spliterator(), false).map(ValidationProblem::toString)// .collect(Collectors.joining("\n")))// .isTrue(); } }
@Test public void shouldGenerateAtlasmapSchemaSetForUpdatePetRequest() throws IOException { final Operation swaggerOperation = swagger.getPaths().get(path).getOperationMap().get(operation); final DataShape shape = generator.createShapeFromRequest(swaggerSpecification, swagger, swaggerOperation); final SoftAssertions softly = new SoftAssertions(); softly.assertThat(shape.getKind()).isEqualTo(DataShapeKinds.XML_SCHEMA); softly.assertThat(shape.getName()).isEqualTo("Request"); softly.assertThat(shape.getDescription()).isEqualTo("API request payload"); softly.assertThat(shape.getExemplar()).isNotPresent(); softly.assertAll(); final String expectedSpecification; try (InputStream in = UnifiedXmlDataShapeGenerator.class.getResourceAsStream("/swagger/" + schemaset)) { expectedSpecification = IOUtils.toString(in, StandardCharsets.UTF_8); } final String specification = shape.getSpecification(); assertThat(specification).isXmlEqualTo(expectedSpecification); }
.isEqualToIgnoringGivenFields(expectedInputDataShape, "specification"); if (generatedInputDataShape.getKind() == DataShapeKinds.JSON_SCHEMA) { assertThat(reformatJson(generatedInputDataShape.getSpecification())) .as("Input data shape specification for action with id: " + actionId + " differ") .isEqualToIgnoringGivenFields(expectedOutputDataShape, "specification"); if (generatedOutputDataShape.getKind() == DataShapeKinds.JSON_SCHEMA) { assertThat(reformatJson(generatedOutputDataShape.getSpecification())) .as("Output data shape specification for action with id: " + actionId + " differ")