@@ -785,6 +785,109 @@ public void objectComposedWithInline() {
785
785
checkComposedChildren (openAPI , schema .getOneOf (), "oneOf" );
786
786
}
787
787
788
+
789
+ @ Test
790
+ public void inheritanceWithInlineDiscriminator () {
791
+ OpenAPI openAPI = TestUtils .parseSpec ("src/test/resources/2_0/regression_6905.yaml" );
792
+ new InlineModelResolver ().flatten (openAPI );
793
+
794
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("PartyType" ) instanceof StringSchema );
795
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("CustomerType" ) instanceof StringSchema );
796
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("Entity" ) instanceof ObjectSchema );
797
+
798
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("Party" ) instanceof ComposedSchema );
799
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("Contact" ) instanceof ComposedSchema );
800
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("Customer" ) instanceof ComposedSchema );
801
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("Person" ) instanceof ComposedSchema );
802
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("Organization" ) instanceof ComposedSchema );
803
+
804
+ assertTrue (openAPI .getComponents ().getSchemas ().get ("ApiError" ) instanceof ObjectSchema );
805
+
806
+ assertFalse (openAPI .getComponents ().getSchemas ().get ("Party_allOf" ) instanceof ComposedSchema );
807
+ assertFalse (openAPI .getComponents ().getSchemas ().get ("Contact_allOf" ) instanceof ComposedSchema );
808
+ assertFalse (openAPI .getComponents ().getSchemas ().get ("Customer_allOf" ) instanceof ComposedSchema );
809
+ assertFalse (openAPI .getComponents ().getSchemas ().get ("Person_allOf" ) instanceof ComposedSchema );
810
+ assertFalse (openAPI .getComponents ().getSchemas ().get ("Organization_allOf" ) instanceof ComposedSchema );
811
+
812
+ // Party
813
+ ComposedSchema party = (ComposedSchema ) openAPI .getComponents ().getSchemas ().get ("Party" );
814
+ List <Schema > partySchemas = party .getAllOf ();
815
+ Schema entity = ModelUtils .getReferencedSchema (openAPI , partySchemas .get (0 ));
816
+ Schema partyAllOf = ModelUtils .getReferencedSchema (openAPI , partySchemas .get (1 ));
817
+
818
+ assertEquals (partySchemas .get (0 ).get$ref (), "#/components/schemas/Entity" );
819
+ assertEquals (partySchemas .get (1 ).get$ref (), "#/components/schemas/Party_allOf" );
820
+
821
+ assertNull (party .getDiscriminator ());
822
+ assertNull (entity .getDiscriminator ());
823
+ assertNotNull (partyAllOf .getDiscriminator ());
824
+ assertEquals (partyAllOf .getDiscriminator ().getPropertyName (), "party_type" );
825
+ assertEquals (partyAllOf .getRequired ().get (0 ), "party_type" );
826
+
827
+
828
+ // Contact
829
+ ComposedSchema contact = (ComposedSchema ) openAPI .getComponents ().getSchemas ().get ("Contact" );
830
+ Schema contactAllOf = ModelUtils .getReferencedSchema (openAPI , contact .getAllOf ().get (1 ));
831
+
832
+ assertEquals (contact .getExtensions ().get ("x-discriminator-value" ), "contact" );
833
+ assertEquals (contact .getAllOf ().get (0 ).get$ref (), "#/components/schemas/Party" );
834
+ assertEquals (contact .getAllOf ().get (1 ).get$ref (), "#/components/schemas/Contact_allOf" );
835
+ assertNull (contactAllOf .getDiscriminator ());
836
+
837
+
838
+ // Customer
839
+ ComposedSchema customer = (ComposedSchema ) openAPI .getComponents ().getSchemas ().get ("Customer" );
840
+ List <Schema > customerSchemas = customer .getAllOf ();
841
+ Schema customerAllOf = ModelUtils .getReferencedSchema (openAPI , customerSchemas .get (1 ));
842
+
843
+ assertEquals (customerSchemas .get (0 ).get$ref (), "#/components/schemas/Party" );
844
+ assertNull (customer .getDiscriminator ());
845
+ assertEquals (customer .getExtensions ().get ("x-discriminator-value" ), "customer" );
846
+
847
+ // Discriminators are not defined at this level in the schema doc
848
+ assertNull (customerSchemas .get (0 ).getDiscriminator ());
849
+ assertEquals (customerSchemas .get (1 ).get$ref (), "#/components/schemas/Customer_allOf" );
850
+ assertNull (customerSchemas .get (1 ).getDiscriminator ());
851
+
852
+ // Customer -> Party where Customer defines it's own discriminator
853
+ assertNotNull (customerAllOf .getDiscriminator ());
854
+ assertEquals (customerAllOf .getDiscriminator ().getPropertyName (), "customer_type" );
855
+ assertEquals (customerAllOf .getRequired ().get (0 ), "customer_type" );
856
+
857
+
858
+ // Person
859
+ ComposedSchema person = (ComposedSchema ) openAPI .getComponents ().getSchemas ().get ("Person" );
860
+ List <Schema > personSchemas = person .getAllOf ();
861
+ Schema personAllOf = ModelUtils .getReferencedSchema (openAPI , personSchemas .get (1 ));
862
+
863
+ // Discriminators are not defined at this level in the schema doc
864
+ assertEquals (personSchemas .get (0 ).get$ref (), "#/components/schemas/Customer" );
865
+ assertNull (personSchemas .get (0 ).getDiscriminator ());
866
+ assertEquals (personSchemas .get (1 ).get$ref (), "#/components/schemas/Person_allOf" );
867
+ assertNull (personSchemas .get (1 ).getDiscriminator ());
868
+
869
+ // Person -> Customer -> Party, so discriminator is not at this level
870
+ assertNull (person .getDiscriminator ());
871
+ assertEquals (person .getExtensions ().get ("x-discriminator-value" ), "person" );
872
+ assertNull (personAllOf .getDiscriminator ());
873
+
874
+
875
+ // Organization
876
+ ComposedSchema organization = (ComposedSchema ) openAPI .getComponents ().getSchemas ().get ("Organization" );
877
+ List <Schema > organizationSchemas = organization .getAllOf ();
878
+ Schema organizationAllOf = ModelUtils .getReferencedSchema (openAPI , organizationSchemas .get (1 ));
879
+
880
+ // Discriminators are not defined at this level in the schema doc
881
+ assertEquals (organizationSchemas .get (0 ).get$ref (), "#/components/schemas/Customer" );
882
+ assertNull (organizationSchemas .get (0 ).getDiscriminator ());
883
+ assertEquals (organizationSchemas .get (1 ).get$ref (), "#/components/schemas/Organization_allOf" );
884
+ assertNull (organizationSchemas .get (1 ).getDiscriminator ());
885
+
886
+ // Organization -> Customer -> Party, so discriminator is not at this level
887
+ assertNull (organizationAllOf .getDiscriminator ());
888
+ assertEquals (organization .getExtensions ().get ("x-discriminator-value" ), "organization" );
889
+ }
890
+
788
891
@ Test
789
892
public void arbitraryObjectModelWithArrayInlineWithTitle () {
790
893
OpenAPI openAPI = TestUtils .parseSpec ("src/test/resources/3_0/inline_model_resolver.yaml" );
@@ -888,4 +991,9 @@ public void callbacks() {
888
991
assertTrue (properties .get ("action" ) instanceof StringSchema );
889
992
assertTrue (properties .get ("data" ) instanceof StringSchema );
890
993
}
994
+
995
+ @ Test
996
+ public void regresssion_6905 () {
997
+
998
+ }
891
999
}
0 commit comments