use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class InlineModelResolverTest method testArbitraryObjectResponseArrayInline.
@Test
public void testArbitraryObjectResponseArrayInline() {
OpenAPI openAPI = new OpenAPI();
ArraySchema arraySchema = new ArraySchema();
ObjectSchema objectSchema = new ObjectSchema();
objectSchema.addProperties("arbitrary", new ObjectSchema());
arraySchema.items(objectSchema);
ApiResponse apiResponse = new ApiResponse();
apiResponse.addExtension("x-foo", "bar");
apiResponse.description("it works!");
apiResponse.content(new Content().addMediaType("*/*", new MediaType().schema(arraySchema)));
openAPI.path("/foo/baz", new PathItem().get(new Operation().responses(new ApiResponses().addApiResponse("200", apiResponse))));
new InlineModelResolver().flatten(openAPI);
ApiResponse response = openAPI.getPaths().get("/foo/baz").getGet().getResponses().get("200");
assertNotNull(response);
assertNotNull(response.getContent().get("*/*").getSchema());
Schema responseProperty = response.getContent().get("*/*").getSchema();
assertTrue(responseProperty instanceof ArraySchema);
ArraySchema arraySchema1 = (ArraySchema) responseProperty;
Schema items = arraySchema1.getItems();
assertNotNull(items);
assertEquals("#/components/schemas/inline_response_200", items.get$ref());
Schema inline = openAPI.getComponents().getSchemas().get("inline_response_200");
assertNotNull(inline);
assertTrue(inline instanceof Schema);
Schema inlineProp = (Schema) inline.getProperties().get("arbitrary");
assertNotNull(inlineProp);
assertTrue(inlineProp instanceof ObjectSchema);
assertNull(inlineProp.getProperties());
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class InlineModelResolverTest method testSkipInlineMatchesFalse.
@Test
public void testSkipInlineMatchesFalse() {
final OpenAPI openAPI = new OpenAPI();
final InlineModelResolver inlineModelResolver = new InlineModelResolver();
final Schema operationAlphaInAsset = new ObjectSchema();
operationAlphaInAsset.setTitle("operationAlphaInAsset");
operationAlphaInAsset.addProperties("id1", new IntegerSchema());
operationAlphaInAsset.addProperties("id2", new IntegerSchema());
final Schema operationAlphaIn = new ObjectSchema();
operationAlphaIn.setTitle("operationAlphaIn");
operationAlphaIn.addProperties("asset", operationAlphaInAsset);
final Schema operationAlphaRequest = new ObjectSchema();
operationAlphaRequest.setTitle("operationAlphaRequest");
operationAlphaRequest.addProperties("in", operationAlphaIn);
final Schema operationBetaInAsset = new ObjectSchema();
operationBetaInAsset.setTitle("operationBetaInAsset");
operationBetaInAsset.addProperties("id1", new IntegerSchema());
operationBetaInAsset.addProperties("id2", new IntegerSchema());
final Schema operationBetaIn = new ObjectSchema();
operationBetaIn.setTitle("operationBetaIn");
operationBetaIn.addProperties("asset", operationBetaInAsset);
final Schema operationBetaRequest = new ObjectSchema();
operationBetaRequest.setTitle("operationBetaRequest");
operationBetaRequest.addProperties("in", operationBetaIn);
openAPI.path("/operationAlpha", new PathItem().get(new Operation().requestBody(new RequestBody().content(new Content().addMediaType("*/*", new MediaType().schema(operationAlphaRequest))))));
openAPI.path("/operationBeta", new PathItem().get(new Operation().requestBody(new RequestBody().content(new Content().addMediaType("*/*", new MediaType().schema(operationBetaRequest))))));
inlineModelResolver.flatten(openAPI);
assertNotNull(openAPI);
assertNotNull(openAPI.getComponents());
assertNotNull(openAPI.getComponents().getSchemas());
assertEquals(openAPI.getComponents().getSchemas().size(), 6);
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class OpenAPIDeserializerTest method testOneOfSchema.
@Test
public void testOneOfSchema(@Injectable List<AuthorizationValue> auths) {
String yaml = "openapi: '3.0'\n" + "components:\n" + " schemas:\n" + " Cat:\n" + " type: object\n" + " # all properties specific to a `Cat`\n" + " properties:\n" + " purring:\n" + " type: string\n" + " Dog:\n" + " type: object\n" + " # all properties specific to a `Dog`\n" + " properties:\n" + " bark:\n" + " type: string\n" + " Pet:\n" + " oneOf: \n" + " - $ref: '#/components/schemas/Cat'\n" + " - $ref: '#/components/schemas/Dog'\n" + " - type: object\n" + " # neither a `Cat` nor a `Dog`\n" + " properties:\n" + " name:\n" + " type: string\n";
OpenAPIV3Parser parser = new OpenAPIV3Parser();
ParseOptions options = new ParseOptions();
options.setResolve(true);
SwaggerParseResult result = parser.readContents(yaml, auths, options);
List<String> messageList = result.getMessages();
Set<String> messages = new HashSet<>(messageList);
Schema petSchema = result.getOpenAPI().getComponents().getSchemas().get("Pet");
assertTrue(petSchema != null);
assertTrue(petSchema instanceof ComposedSchema);
ComposedSchema petCompSchema = (ComposedSchema) petSchema;
List<Schema> oneOfSchemas = petCompSchema.getOneOf();
assertTrue(oneOfSchemas != null);
assertEquals(oneOfSchemas.size(), 3);
Schema refCatSchema = oneOfSchemas.get(0);
assertTrue(refCatSchema != null);
assertEquals(refCatSchema.get$ref(), "#/components/schemas/Cat");
Schema refDogSchema = oneOfSchemas.get(1);
assertTrue(refDogSchema != null);
assertEquals(refDogSchema.get$ref(), "#/components/schemas/Dog");
Schema otherSchema = oneOfSchemas.get(2);
assertTrue(otherSchema != null);
Schema nameProp = (Schema) otherSchema.getProperties().get("name");
assertTrue(nameProp != null);
assertEquals(nameProp.getType(), "string");
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class OpenAPIDeserializerTest method testIssue1072.
@Test
public void testIssue1072() throws Exception {
String yaml = "openapi: 3.0.0\n" + "info:\n" + " title: Test\n" + " version: 1.0.0\n" + "\n" + "paths:\n" + " /value:\n" + " get:\n" + " operationId: getValues\n" + " responses:\n" + " 200:\n" + " description: Successful response\n" + " content:\n" + " application/json:\n" + " schema:\n" + " $ref: '#/components/schemas/ComponentA'\n" + "components:\n" + " schemas:\n" + " ComponentA:\n" + " description: Component A\n" + " type: object\n" + " allOf:\n" + " - type: object\n" + " properties:\n" + " attributeWithoutType:\n" + " allOf:\n" + " - $ref: '#/components/schemas/ComponentB'\n" + " default: \"coucou\"\n" + " attributeWithWrongType:\n" + " type: object\n" + " allOf:\n" + " - $ref: '#/components/schemas/ComponentB'\n" + " default: \"coucou\"\n" + " correctAttribute:\n" + " type: string\n" + " allOf:\n" + " - $ref: '#/components/schemas/ComponentB'\n" + " default: \"coucou\"\n" + " ComponentB:\n" + " description: Component B\n" + " type: string";
OpenAPIV3Parser parser = new OpenAPIV3Parser();
SwaggerParseResult result = parser.readContents(yaml, null, null);
OpenAPI openAPI = result.getOpenAPI();
assertNotNull(openAPI);
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class OpenAPIDeserializerTest method testParamContent.
@Test
public void testParamContent() {
String json = "{" + " \"openapi\": \"3.0.0\"," + " \"info\": {" + " \"title\": \"Operations\"," + " \"version\": \"0.0.0\"" + " }," + " \"paths\": {" + " \"/operations\": {" + " \"post\": {" + " \"parameters\": [" + " {" + " \"name\": \"param0\"," + " \"in\": \"query\"," + " \"content\": {" + " }" + " }," + " {" + " \"name\": \"param1\"," + " \"in\": \"query\"," + " \"content\": {" + " \"text/plain\": {" + " }" + " }" + " }," + " {" + " \"name\": \"param2\"," + " \"in\": \"query\"," + " \"content\": {" + " \"text/plain\": {" + " }," + " \"application/json\": {" + " \"schema\": {" + " \"type\": \"object\"" + " }" + " }" + " }" + " }" + " ]," + " \"responses\": {" + " \"default\": {" + " \"description\": \"None\"" + " }" + " }" + " }" + " }" + " }" + "}";
OpenAPIV3Parser parser = new OpenAPIV3Parser();
SwaggerParseResult result = parser.readContents(json, null, null);
Operation post = result.getOpenAPI().getPaths().get("/operations").getPost();
Parameter param0 = post.getParameters().stream().filter(p -> "param0".equals(p.getName())).findFirst().orElseThrow(() -> new IllegalStateException("Can't find parameter=param0"));
assertEquals(result.getMessages().contains("attribute paths.'/operations'(post).parameters.[param0].content with no media type is unsupported"), true, "No media types error reported");
assertEquals(param0.getContent(), null, "Empty content");
Parameter param1 = post.getParameters().stream().filter(p -> "param1".equals(p.getName())).findFirst().orElseThrow(() -> new IllegalStateException("Can't find parameter=param1"));
assertEquals(param1.getContent().size(), 1, "Valid content size");
Parameter param2 = post.getParameters().stream().filter(p -> "param2".equals(p.getName())).findFirst().orElseThrow(() -> new IllegalStateException("Can't find parameter=param2"));
assertEquals(result.getMessages().contains("attribute paths.'/operations'(post).parameters.[param2].content with multiple media types is unsupported"), true, "Multiple media types error reported");
assertEquals(param2.getContent(), null, "Content with multiple media types");
assertEquals(result.getMessages().size(), 2, "Messages");
}
Aggregations