11package io .swagger .v3 .core .serialization ;
22
33import io .swagger .v3 .core .converter .ModelConverters ;
4+ import io .swagger .v3 .core .util .PrimitiveType ;
45import io .swagger .v3 .oas .models .media .Schema ;
56import org .testng .Assert ;
67import org .testng .annotations .Test ;
910import java .util .Map ;
1011
1112public class Oas31ObjectFieldTest {
12- @ Test (description = "Repro #4682: In OAS 3.1, raw Object property should not be rendered as an empty schema" )
13- public void rawObjectPropertyShouldBeObjectSchema () {
13+
14+ @ Test (description = "Regression test for #4868: In OAS 3.1, raw Object property should be rendered as an empty schema" )
15+ public void rawObjectPropertyShouldBeEmptySchema () {
1416 Map <String , Schema > schemas = ModelConverters .getInstance (true ).readAll (PojoUsingObjectField .class );
1517 Schema pojo = schemas .get ("PojoUsingObjectField" );
1618 Assert .assertNotNull (pojo , "PojoUsingObjectField schema should exist" );
19+ Schema myField = (Schema ) pojo .getProperties ().get ("myField" );
20+ Assert .assertNotNull (myField , "myField schema should exist" );
21+ Assert .assertNull (myField .getTypes (), "Expected raw Object property to be an empty schema in OAS 3.1, but was: type=" + myField .getType () + ", types=" + myField .getTypes () + ", class=" + myField .getClass ());
22+ }
1723
24+ @ Test (description = "Regression test for #4868: OAS 3.1: List<Object> items schema should be empty" )
25+ public void listOfObjectItemsShouldBeEmptySchema () {
26+ Map <String , Schema > schemas = ModelConverters .getInstance (true ).readAll (PojoUsingListOfObject .class );
27+ Schema pojo = schemas .get ("PojoUsingListOfObject" );
28+ Assert .assertNotNull (pojo , "PojoUsingListOfObject schema should exist" );
29+ Schema itemsProp = (Schema ) pojo .getProperties ().get ("items" );
30+ Assert .assertNotNull (itemsProp , "items property schema should exist" );
31+ Schema itemSchema = itemsProp .getItems ();
32+ Assert .assertNotNull (itemSchema , "List<Object> items schema should exist" );
33+ Assert .assertNull (itemSchema .getTypes (), "Expected List<Object> items to be an empty schema in OAS 3.1, but was: type=" + itemSchema .getType () + ", types=" + itemSchema .getTypes () + ", class=" + itemSchema .getClass ());
34+ }
35+
36+ @ Test (description = "Regression test for #4868: OAS 3.1: Map<String,Object> additionalProperties schema should be empty" )
37+ public void mapOfObjectAdditionalPropertiesShouldBeEmptySchema () {
38+ Map <String , Schema > schemas = ModelConverters .getInstance (true ).readAll (PojoUsingMapStringToObject .class );
39+ Schema pojo = schemas .get ("PojoUsingMapStringToObject" );
40+ Assert .assertNotNull (pojo , "PojoUsingMapStringToObject schema should exist" );
41+ Schema additionalProp = (Schema ) pojo .getProperties ().get ("additional" );
42+ Assert .assertNotNull (additionalProp , "additional property schema should exist" );
43+ Schema valueSchema = (Schema ) additionalProp .getAdditionalProperties ();
44+ Assert .assertNotNull (valueSchema , "Map<String,Object> additionalProperties (value schema) should exist" );
45+ Assert .assertNull (valueSchema .getTypes (), "Expected Map<String,Object> additionalProperties to be an empty schema in OAS 3.1, but was: type=" + valueSchema .getType () + ", types=" + valueSchema .getTypes () + ", class=" + valueSchema .getClass ());
46+ }
47+
48+ @ Test (description = "Repro #4682: In OAS 3.1, raw Object property should not be rendered as an empty schema if explicit-object-schema is enabled" )
49+ public void rawObjectPropertyShouldBeObjectSchema () {
50+ setExplicitTypeObject (true );
51+ Map <String , Schema > schemas = ModelConverters .getInstance (true ).readAll (PojoUsingObjectField .class );
52+ Schema pojo = schemas .get ("PojoUsingObjectField" );
53+ Assert .assertNotNull (pojo , "PojoUsingObjectField schema should exist" );
1854 Schema myField = (Schema ) pojo .getProperties ().get ("myField" );
1955 Assert .assertNotNull (myField , "myField schema should exist" );
2056 Assert .assertTrue (isObjectSchema (myField ), "Expected raw Object property to be an object schema in OAS 3.1, but was: type=" + myField .getType () + ", types=" + myField .getTypes () + ", class=" + myField .getClass ());
57+ setExplicitTypeObject (null );
2158 }
2259
23- @ Test (description = "OAS 3.1: List<Object> items schema should be object" )
60+ @ Test (description = "OAS 3.1: List<Object> items schema should be object if explicit-object-schema is enabled " )
2461 public void listOfObjectItemsShouldBeObjectSchema () {
62+ setExplicitTypeObject (true );
2563 Map <String , Schema > schemas = ModelConverters .getInstance (true ).readAll (PojoUsingListOfObject .class );
2664 Schema pojo = schemas .get ("PojoUsingListOfObject" );
2765 Assert .assertNotNull (pojo , "PojoUsingListOfObject schema should exist" );
@@ -30,10 +68,12 @@ public void listOfObjectItemsShouldBeObjectSchema() {
3068 Schema itemSchema = itemsProp .getItems ();
3169 Assert .assertNotNull (itemSchema , "List<Object> items schema should exist" );
3270 Assert .assertTrue (isObjectSchema (itemSchema ), "Expected List<Object> items to be an object schema in OAS 3.1, but was: type=" + itemSchema .getType () + ", types=" + itemSchema .getTypes () + ", class=" + itemSchema .getClass ());
71+ setExplicitTypeObject (null );
3372 }
3473
35- @ Test (description = "OAS 3.1: Map<String,Object> additionalProperties schema should be object" )
74+ @ Test (description = "OAS 3.1: Map<String,Object> additionalProperties schema should be object if explicit-object-schema is enabled " )
3675 public void mapOfObjectAdditionalPropertiesShouldBeObjectSchema () {
76+ setExplicitTypeObject (true );
3777 Map <String , Schema > schemas = ModelConverters .getInstance (true ).readAll (PojoUsingMapStringToObject .class );
3878 Schema pojo = schemas .get ("PojoUsingMapStringToObject" );
3979 Assert .assertNotNull (pojo , "PojoUsingMapStringToObject schema should exist" );
@@ -42,6 +82,7 @@ public void mapOfObjectAdditionalPropertiesShouldBeObjectSchema() {
4282 Schema valueSchema = (Schema ) additionalProp .getAdditionalProperties ();
4383 Assert .assertNotNull (valueSchema , "Map<String,Object> additionalProperties (value schema) should exist" );
4484 Assert .assertTrue (isObjectSchema (valueSchema ), "Expected Map<String,Object> additionalProperties to be an object schema in OAS 3.1, but was: type=" + valueSchema .getType () + ", types=" + valueSchema .getTypes () + ", class=" + valueSchema .getClass ());
85+ setExplicitTypeObject (null );
4586 }
4687
4788 /**
@@ -88,4 +129,10 @@ public void setAdditional(Map<String, Object> additional) {
88129 this .additional = additional ;
89130 }
90131 }
132+
133+ // We need to set it programmatically rather than with system properties since the field instantiation is static
134+ // (only read from system env once, thus it cannot be changed/alternated back and forth)
135+ private void setExplicitTypeObject (Boolean value ) {
136+ PrimitiveType .explicitObjectType = value ;
137+ }
91138}
0 commit comments