@@ -71,21 +71,23 @@ class TestModel:
7171 def test_from_data (self , mocker ):
7272 from openapi_python_client .parser .properties import Property
7373
74+ required_property = mocker .MagicMock (autospec = Property )
75+ required_property .allOf = None
76+ required_imports = mocker .MagicMock ()
77+ required_property .get_imports .return_value = {required_imports }
78+ optional_property = mocker .MagicMock (autospec = Property )
79+ optional_property .allOf = None
80+ optional_imports = mocker .MagicMock ()
81+ optional_property .get_imports .return_value = {optional_imports }
7482 in_data = oai .Schema .construct (
7583 title = mocker .MagicMock (),
7684 description = mocker .MagicMock (),
7785 required = ["RequiredEnum" ],
7886 properties = {
79- "RequiredEnum" : mocker . MagicMock () ,
80- "OptionalDateTime" : mocker . MagicMock () ,
87+ "RequiredEnum" : required_property ,
88+ "OptionalDateTime" : optional_property ,
8189 },
8290 )
83- required_property = mocker .MagicMock (autospec = Property )
84- required_imports = mocker .MagicMock ()
85- required_property .get_imports .return_value = {required_imports }
86- optional_property = mocker .MagicMock (autospec = Property )
87- optional_imports = mocker .MagicMock ()
88- optional_property .get_imports .return_value = {optional_imports }
8991 property_from_data = mocker .patch (
9092 f"{ MODULE_NAME } .property_from_data" ,
9193 side_effect = [required_property , optional_property ],
@@ -107,6 +109,7 @@ def test_from_data(self, mocker):
107109 optional_property .get_imports .assert_called_once_with (prefix = ".." )
108110 assert result == Model (
109111 reference = from_ref (),
112+ references = [],
110113 required_properties = [required_property ],
111114 optional_properties = [optional_property ],
112115 relative_imports = {
@@ -117,14 +120,17 @@ def test_from_data(self, mocker):
117120 )
118121
119122 def test_from_data_property_parse_error (self , mocker ):
123+ from openapi_python_client .parser .properties import Property
124+
125+ required_property = mocker .MagicMock (autospec = Property )
126+ required_property .allOf = None
127+ optional_property = mocker .MagicMock (autospec = Property )
128+ optional_property .allOf = None
120129 in_data = oai .Schema .construct (
121130 title = mocker .MagicMock (),
122131 description = mocker .MagicMock (),
123132 required = ["RequiredEnum" ],
124- properties = {
125- "RequiredEnum" : mocker .MagicMock (),
126- "OptionalDateTime" : mocker .MagicMock (),
127- },
133+ properties = {"RequiredEnum" : required_property , "OptionalDateTime" : optional_property },
128134 )
129135 parse_error = ParseError (data = mocker .MagicMock ())
130136 property_from_data = mocker .patch (
@@ -144,6 +150,57 @@ def test_from_data_property_parse_error(self, mocker):
144150
145151 assert result == parse_error
146152
153+ def test_resolve_references (self , mocker ):
154+
155+ schemas = {
156+ "RefA" : oai .Schema .construct (
157+ title = mocker .MagicMock (),
158+ description = mocker .MagicMock (),
159+ required = ["String" ],
160+ properties = {
161+ "String" : oai .Schema .construct (type = "string" ),
162+ "Enum" : oai .Schema .construct (type = "string" , enum = ["aValue" ]),
163+ "DateTime" : oai .Schema .construct (type = "string" , format = "date-time" ),
164+ },
165+ ),
166+ "RefB" : oai .Schema .construct (
167+ title = mocker .MagicMock (),
168+ description = mocker .MagicMock (),
169+ required = ["DateTime" ],
170+ properties = {
171+ "Int" : oai .Schema .construct (type = "integer" ),
172+ "DateTime" : oai .Schema .construct (type = "string" , format = "date-time" ),
173+ "Float" : oai .Schema .construct (type = "number" , format = "float" )
174+ },
175+ ),
176+ }
177+
178+ model_schema = oai .Schema .construct (
179+ allOf = [
180+ oai .Reference .construct (ref = "#/components/schemas/RefA" ),
181+ oai .Reference .construct (ref = "#/components/schemas/RefB" ),
182+ oai .Schema .construct (
183+ title = mocker .MagicMock (),
184+ description = mocker .MagicMock (),
185+ required = ["Float" ],
186+ properties = {
187+ "String" : oai .Schema .construct (type = "string" ),
188+ "Float" : oai .Schema .construct (type = "number" , format = "float" ),
189+ },
190+ ),
191+ ]
192+ )
193+
194+ from openapi_python_client .parser .openapi import Model
195+
196+ model = Model .from_data (data = model_schema , name = "Model" )
197+ model .resolve_references (schemas )
198+ print (f"{ model = } " )
199+ assert sorted (p .name for p in model .required_properties ) == ["DateTime" , "Float" , "String" ]
200+ assert all (p .required for p in model .required_properties )
201+ assert sorted (p .name for p in model .optional_properties ) == ["Enum" , "Int" ]
202+ assert all (not p .required for p in model .optional_properties )
203+
147204
148205class TestSchemas :
149206 def test_build (self , mocker ):
@@ -159,6 +216,8 @@ def test_build(self, mocker):
159216 result = Schemas .build (schemas = in_data )
160217
161218 from_data .assert_has_calls ([mocker .call (data = value , name = name ) for (name , value ) in in_data .items ()])
219+ schema_1 .resolve_references .assert_called_once_with (in_data )
220+ schema_2 .resolve_references .assert_called_once_with (in_data )
162221 assert result == Schemas (
163222 models = {
164223 schema_1 .reference .class_name : schema_1 ,
0 commit comments