package io.swagger; import io.swagger.converter.ModelConverters; import io.swagger.matchers.SerializationMatchers; import io.swagger.models.Model; import io.swagger.models.Model1979; import io.swagger.models.ModelImpl; import io.swagger.models.ModelWithBooleanProperty; import io.swagger.models.ModelWithModelPropertyOverrides; import io.swagger.models.ModelWithPrimitiveArray; import io.swagger.models.ReadOnlyFields; import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.BooleanProperty; import io.swagger.models.properties.IntegerProperty; import io.swagger.models.properties.LongProperty; import io.swagger.models.properties.Property; import io.swagger.models.properties.RefProperty; import io.swagger.models.properties.StringProperty; import org.testng.annotations.Test; import java.util.Date; import java.util.List; import java.util.Map; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; public class ModelPropertyTest { @Test public void extractProperties() { final Map<String, Model> models = ModelConverters.getInstance().readAll(Family.class); assertEquals(models.size(), 3); final Model person = models.get("Person"); final Property employer = person.getProperties().get("employer"); assertTrue(employer instanceof ArrayProperty); final ArrayProperty employerProperty = (ArrayProperty) employer; final Property items = employerProperty.getItems(); assertTrue(items instanceof RefProperty); assertEquals(((RefProperty) items).getSimpleRef(), "Employer"); final Property awards = person.getProperties().get("awards"); assertTrue(awards instanceof ArrayProperty); assertTrue(((ArrayProperty) awards).getItems() instanceof StringProperty); } @Test public void extractPrimitiveArray() { final Map<String, Model> models = ModelConverters.getInstance().readAll(ModelWithPrimitiveArray.class); assertEquals(models.size(), 1); final Model model = models.get("ModelWithPrimitiveArray"); final ArrayProperty longArray = (ArrayProperty) model.getProperties().get("longArray"); final Property longArrayItems = longArray.getItems(); assertTrue(longArrayItems instanceof LongProperty); final ArrayProperty intArray = (ArrayProperty) model.getProperties().get("intArray"); assertTrue(intArray.getItems() instanceof IntegerProperty); } @Test public void readModelProperty() { final Map<String, Model> models = ModelConverters.getInstance().readAll(IsModelTest.class); final Model model = models.get("IsModelTest"); assertNotNull(model); } @Test(description = "it should read a model with property dataTypes configured #679") public void readDataTypesProperty() { final Map<String, Model> models = ModelConverters.getInstance().readAll(ModelWithModelPropertyOverrides.class); final String json = "{" + " \"Children\":{" + " \"type\":\"object\"," + " \"properties\":{" + " \"name\":{" + " \"type\":\"string\"" + " }" + " }" + " }," + " \"ModelWithModelPropertyOverrides\":{" + " \"type\":\"object\"," + " \"properties\":{" + " \"children\":{" + " \"type\":\"array\"," + " \"items\":{" + " \"$ref\":\"#/definitions/Children\"" + " }" + " }" + " }" + " }" + "}"; SerializationMatchers.assertEqualsToJson(models, json); } @Test public void testReadOnlyProperty() { final Map<String, Model> models = ModelConverters.getInstance().readAll(ReadOnlyFields.class); ModelImpl model = (ModelImpl) models.get("ReadOnlyFields"); assertTrue(model.getProperties().get("id").getReadOnly()); } @Test public void modelAllowEmptyTest() { final Map<String, Model> models = ModelConverters.getInstance().readAll(Model1979.class); ModelImpl model = (ModelImpl) models.get("Model1979"); assertTrue(model.getProperties().get("id").getAllowEmptyValue()); } @Test public void testIssue1743() { final Map<String, Model> models = ModelConverters.getInstance().readAll(ModelWithBooleanProperty.class); final Model model = models.get("ModelWithBooleanProperty"); assertNotNull(model); BooleanProperty bp = (BooleanProperty) model.getProperties().get("isGreat"); assertTrue(bp.getEnum().size() == 1); assertEquals(bp.getEnum().get(0), Boolean.TRUE); } class Family { public Date membersSince; public List<Person> members; } class Person { public String firstname; public String lastname; public int age; public Date birthday; public List<Employer> employer; public List<String> awards; } class Employer { public String name; public int size; } class IsModelTest { public Boolean is_happy; public String name; } }