PatternAndSchemaPropertiesTest.java
package io.swagger.v3.core.resolving.v31;
import io.swagger.v3.core.converter.AnnotatedType;
import io.swagger.v3.core.converter.ModelConverterContextImpl;
import io.swagger.v3.core.jackson.ModelResolver;
import io.swagger.v3.core.matchers.SerializationMatchers;
import io.swagger.v3.core.resolving.SwaggerTestBase;
import io.swagger.v3.core.resolving.v31.model.AnnotatedPet;
import io.swagger.v3.core.resolving.v31.model.AnnotatedPetSinglePatternProperty;
import io.swagger.v3.core.util.OpenAPISchema2JsonSchema;
import io.swagger.v3.oas.models.media.Schema;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class PatternAndSchemaPropertiesTest extends SwaggerTestBase {
@Test
public void testPatternAndSchemaProperties() throws Exception {
final ModelResolver modelResolver = new ModelResolver(mapper());
ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
Schema model = context
.resolve(new AnnotatedType(AnnotatedPet.class));
assertEquals(((Schema)model.getPatternProperties().get("what.*ever")).getFormat(), "int32");
assertEquals(((Schema)model.getPatternProperties().get("it.*takes")).get$ref(), "#/components/schemas/Category");
assertEquals(((Schema)model.getProperties().get("anotherCategory")).get$ref(), "#/components/schemas/Category");
assertEquals(((Schema)model.getProperties().get("anotherInteger")).getFormat(), "int32");
SerializationMatchers.assertEqualsToYaml(context.getDefinedModels(), "AnnotatedPet:\n" +
" type: object\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int64\n" +
" category:\n" +
" $ref: \"#/components/schemas/Category\"\n" +
" name:\n" +
" type: string\n" +
" photoUrls:\n" +
" type: array\n" +
" xml:\n" +
" wrapped: true\n" +
" items:\n" +
" type: string\n" +
" xml:\n" +
" name: photoUrl\n" +
" tags:\n" +
" type: array\n" +
" xml:\n" +
" wrapped: true\n" +
" items:\n" +
" $ref: \"#/components/schemas/Tag\"\n" +
" status:\n" +
" type: string\n" +
" description: pet status in the store\n" +
" enum:\n" +
" - available\n" +
" - pending\n" +
" - sold\n" +
" anotherCategory:\n" +
" $ref: \"#/components/schemas/Category\"\n" +
" anotherInteger:\n" +
" maximum: 10\n" +
" type: integer\n" +
" description: prop schema 1\n" +
" format: int32\n" +
" description: Annotated Pet\n" +
" nullable: true\n" +
"Category:\n" +
" type: object\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int64\n" +
" name:\n" +
" type: string\n" +
" description: prop schema 2\n" +
" xml:\n" +
" name: Category\n" +
"Tag:\n" +
" type: object\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int64\n" +
" name:\n" +
" type: string\n" +
" xml:\n" +
" name: Tag");
context.getDefinedModels().values().forEach(s -> new OpenAPISchema2JsonSchema().process(s));
SerializationMatchers.assertEqualsToYaml31(context.getDefinedModels(), "AnnotatedPet:\n" +
" type:\n" +
" - object\n" +
" - \"null\"\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int64\n" +
" category:\n" +
" $ref: \"#/components/schemas/Category\"\n" +
" name:\n" +
" type: string\n" +
" photoUrls:\n" +
" type: array\n" +
" xml:\n" +
" wrapped: true\n" +
" items:\n" +
" type: string\n" +
" xml:\n" +
" name: photoUrl\n" +
" tags:\n" +
" type: array\n" +
" xml:\n" +
" wrapped: true\n" +
" items:\n" +
" $ref: \"#/components/schemas/Tag\"\n" +
" status:\n" +
" type: string\n" +
" description: pet status in the store\n" +
" enum:\n" +
" - available\n" +
" - pending\n" +
" - sold\n" +
" anotherCategory:\n" +
" $ref: \"#/components/schemas/Category\"\n" +
" anotherInteger:\n" +
" maximum: 10\n" +
" type: integer\n" +
" description: prop schema 1\n" +
" format: int32\n" +
" patternProperties:\n" +
" what.*ever:\n" +
" maximum: 10\n" +
" type: integer\n" +
" description: prop schema 1\n" +
" format: int32\n" +
" it.*takes:\n" +
" $ref: \"#/components/schemas/Category\"\n" +
" description: Annotated Pet\n" +
"Category:\n" +
" type: object\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int64\n" +
" name:\n" +
" type: string\n" +
" description: prop schema 2\n" +
" xml:\n" +
" name: Category\n" +
"Tag:\n" +
" type: object\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int64\n" +
" name:\n" +
" type: string\n" +
" xml:\n" +
" name: Tag\n");
}
@Test
public void testSinglePatternAndSchemaProperties() throws Exception {
final ModelResolver modelResolver = new ModelResolver(mapper());
ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
Schema model = context
.resolve(new AnnotatedType(AnnotatedPetSinglePatternProperty.class));
assertEquals(((Schema)model.getPatternProperties().get("what.*ever")).getFormat(), "int32");
assertEquals(((Schema)model.getProperties().get("anotherCategory")).get$ref(), "#/components/schemas/Category");
}
}