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