@@ -139,8 +139,83 @@ def test__build_metadata(self, mocker):
139139 readme_template .render .assert_called_once_with (description = description )
140140 readme_path .write_text .assert_called_once_with (readme_template .render ())
141141
142- # def test__build_models(self):
143- # assert False
144- #
142+ def test__build_models (self , mocker ):
143+ from openapi_python_client import _Project , OpenAPI
144+
145+ openapi = mocker .MagicMock (autospec = OpenAPI , title = "My Test API" )
146+ schema_1 = mocker .MagicMock ()
147+ schema_2 = mocker .MagicMock ()
148+ openapi .schemas = {"1" : schema_1 , "2" : schema_2 }
149+ enum_1 = mocker .MagicMock ()
150+ enum_2 = mocker .MagicMock ()
151+ openapi .enums = {"1" : enum_1 , "2" : enum_2 }
152+ project = _Project (openapi = openapi )
153+ project .package_dir = mocker .MagicMock ()
154+ models_init = mocker .MagicMock ()
155+ models_dir = mocker .MagicMock ()
156+ schema_1_module_path = mocker .MagicMock ()
157+ schema_2_module_path = mocker .MagicMock ()
158+ enum_1_module_path = mocker .MagicMock ()
159+ enum_2_module_path = mocker .MagicMock ()
160+ module_paths = {
161+ "__init__.py" : models_init ,
162+ f"{ schema_1 .reference .module_name } .py" : schema_1_module_path ,
163+ f"{ schema_2 .reference .module_name } .py" : schema_2_module_path ,
164+ f"{ enum_1 .name } .py" : enum_1_module_path ,
165+ f"{ enum_2 .name } .py" : enum_2_module_path ,
166+ }
167+ models_dir .__truediv__ .side_effect = lambda x : module_paths [x ]
168+ project .package_dir .__truediv__ .return_value = models_dir
169+ model_render_1 = mocker .MagicMock ()
170+ model_render_2 = mocker .MagicMock ()
171+ model_template = mocker .MagicMock ()
172+ model_template .render .side_effect = [model_render_1 , model_render_2 ]
173+ enum_render_1 = mocker .MagicMock ()
174+ enum_render_2 = mocker .MagicMock ()
175+ enum_template = mocker .MagicMock ()
176+ enum_renders = {
177+ enum_1 : enum_render_1 ,
178+ enum_2 : enum_render_2 ,
179+ }
180+ enum_template .render .side_effect = lambda enum : enum_renders [enum ]
181+ models_init_template = mocker .MagicMock ()
182+ templates = {
183+ "model.pyi" : model_template ,
184+ "enum.pyi" : enum_template ,
185+ "models_init.pyi" : models_init_template ,
186+ }
187+ project .env = mocker .MagicMock ()
188+ project .env .get_template .side_effect = lambda x : templates [x ]
189+ imports = [
190+ "import_schema_1" ,
191+ "import_schema_2" ,
192+ "import_enum_1" ,
193+ "import_enum_2" ,
194+ ]
195+ import_string_from_reference = mocker .patch (
196+ "openapi_python_client.import_string_from_reference" , side_effect = imports
197+ )
198+
199+ project ._build_models ()
200+
201+ project .package_dir .__truediv__ .assert_called_once_with ("models" )
202+ models_dir .mkdir .assert_called_once ()
203+ models_dir .__truediv__ .assert_has_calls ([mocker .call (key ) for key in module_paths ])
204+ project .env .get_template .assert_has_calls ([mocker .call (key ) for key in templates ])
205+ model_template .render .assert_has_calls ([mocker .call (schema = schema_1 ), mocker .call (schema = schema_2 )])
206+ schema_1_module_path .write_text .assert_called_once_with (model_render_1 )
207+ schema_2_module_path .write_text .assert_called_once_with (model_render_2 )
208+ import_string_from_reference .assert_has_calls (
209+ [
210+ mocker .call (schema_1 .reference ),
211+ mocker .call (schema_2 .reference ),
212+ mocker .call (enum_1 .reference ),
213+ mocker .call (enum_2 .reference ),
214+ ]
215+ )
216+ models_init_template .render .assert_called_once_with (imports = imports )
217+ enum_1_module_path .write_text .assert_called_once_with (enum_render_1 )
218+ enum_2_module_path .write_text .assert_called_once_with (enum_render_2 )
219+
145220 # def test__build_api(self):
146221 # assert False
0 commit comments