Skip to content

Commit c472e44

Browse files
committed
Added a test for models generation
Progress on #3
1 parent 758d33a commit c472e44

File tree

2 files changed

+80
-5
lines changed

2 files changed

+80
-5
lines changed

.circleci/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ jobs:
1212
keys:
1313
- v1-dependencies-{{ checksum "poetry.lock" }}
1414
- run:
15-
name: install dependencies
15+
name: Install Dependencies
1616
command: |
1717
pip install poetry --user --upgrade
1818
poetry config virtualenvs.in-project true
1919
poetry install
2020
2121
- run:
22-
name: run tests
22+
name: Run Tests
2323
command: |
2424
mkdir -p test-reports/safety test-reports/mypy test-reports/pytest
2525
poetry run black . --check

tests/test___init__.py

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)