44
55from fastapi_forge .dtos import (
66 CustomEnum ,
7- CustomEnumValue ,
87 Model ,
98 ModelField ,
109)
2625
2726
2827{% set unique_relationships = model.relationships | unique(attribute='target') %}
29- {% for relation in unique_relationships -%}
28+ {% for relation in unique_relationships if relation.target != model.name_cc -%}
3029from src.models.{{ relation.target_model }}_models import {{ relation.target }}
3130{% endfor %}
3231
@@ -43,7 +42,7 @@ class {{ model.name_cc }}(Base):
4342 {% endfor %}
4443
4544 {% for relation in model.relationships -%}
46- {{ relation | generate_relationship }}
45+ {{ relation | generate_relationship(model.name_cc == relation.target) }}
4746 {% endfor %}
4847"""
4948
@@ -182,8 +181,10 @@ async def get_{{ model.name }}(
182181import pytest
183182from tests import factories
184183from src.daos import AllDAOs
184+ from src import enums
185185from httpx import AsyncClient
186186from datetime import datetime, timezone, timedelta
187+ from uuid import uuid4
187188
188189
189190from typing import Any
@@ -200,11 +201,11 @@ async def test_post_{{ model.name }}(client: AsyncClient, daos: AllDAOs,) -> Non
200201 {%- endfor %}
201202
202203 input_json = {
203- {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key) -%}
204- {%- if not field.primary_key and field.name.endswith('_id') -%}
204+ {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key or not field.type_info.test_value ) -%}
205+ {%- if not field.primary_key and field.name.endswith('_id') and field.metadata.is_foreign_key -%}
205206 "{{ field.name }}": str({{ field.name | replace('_id', '.id') }}),
206207 {%- elif not field.primary_key %}
207- "{{ field.name }}": {{ field.type_info.test_value }}{{ field.type_info.test_func }},
208+ "{{ field.name }}": {{ field.type_info.test_value }}{{ field.type_info.test_func if field.type_info.test_func else '' }},
208209 {%- endif %}
209210 {%- endfor %}
210211 }
@@ -216,11 +217,19 @@ async def test_post_{{ model.name }}(client: AsyncClient, daos: AllDAOs,) -> Non
216217 db_{{ model.name }} = await daos.{{ model.name }}.filter_first(id=response_data["id"])
217218
218219 assert db_{{ model.name }} is not None
219- {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key) %}
220- {%- if not field.primary_key and field.name.endswith('_id') %}
221- assert db_{{ model.name }}.{{ field.name }} == UUID(input_json["{{ field.name }}"])
220+ {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key or not field.type_info.test_value) %}
221+ {%- if not field.primary_key and field.metadata.is_foreign_key %}
222+ {%- if field.type_info.encapsulate_assert %}
223+ assert db_{{ model.name }}.{{ field.name }} == {{ field.type_info.encapsulate_assert }}(input_json["{{ field.name }}"])
224+ {%- else %}
225+ assert db_{{ model.name }}.{{ field.name }} == input_json["{{ field.name }}"]
226+ {%- endif %}
222227 {%- elif not field.primary_key %}
223- assert db_{{ model.name }}.{{ field.name }}{{ field.type_info.test_func }} == input_json["{{ field.name }}"]
228+ {%- if field.type_info.encapsulate_assert %}
229+ assert db_{{ model.name }}.{{ field.name }}{{ field.type_info.test_func if field.type_info.test_func else '' }} == {{ field.type_info.encapsulate_assert }}(input_json["{{ field.name }}"])
230+ {%- else %}
231+ assert db_{{ model.name }}.{{ field.name }}{{ field.type_info.test_func if field.type_info.test_func else '' }} == input_json["{{ field.name }}"]
232+ {%- endif %}
224233 {%- endif %}
225234 {%- endfor %}
226235"""
@@ -278,7 +287,7 @@ async def test_get_{{ model.name }}_by_id(client: AsyncClient,) -> None:
278287 {%- if not field.primary_key and field.name.endswith('_id') %}
279288 assert response_data["{{ field.name }}"] == str({{ model.name }}.{{ field.name }})
280289 {%- elif not field.primary_key %}
281- assert response_data["{{ field.name }}"] == {{ model.name }}.{{ field.name }}{{ field.type_info.test_func }}
290+ assert response_data["{{ field.name }}"] == {{ model.name }}.{{ field.name }}{{ field.type_info.test_func if field.type_info.test_func else '' }}
282291 {%- endif %}
283292 {%- endfor %}
284293"""
@@ -287,8 +296,10 @@ async def test_get_{{ model.name }}_by_id(client: AsyncClient,) -> None:
287296import pytest
288297from tests import factories
289298from src.daos import AllDAOs
299+ from src import enums
290300from httpx import AsyncClient
291301from datetime import datetime, timezone, timedelta
302+ from uuid import uuid4
292303
293304
294305from typing import Any
@@ -306,11 +317,11 @@ async def test_patch_{{ model.name }}(client: AsyncClient, daos: AllDAOs,) -> No
306317 {{ model.name }} = await factories.{{ model.name_cc }}Factory.create()
307318
308319 input_json = {
309- {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key) -%}
310- {%- if not field.primary_key and field.name.endswith('_id') -%}
320+ {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key or not field.type_info.test_value ) -%}
321+ {%- if not field.primary_key and field.name.endswith('_id') and field.metadata.is_foreign_key -%}
311322 "{{ field.name }}": str({{ field.name | replace('_id', '.id') }}),
312323 {% elif not field.primary_key %}
313- "{{ field.name }}": {{ field.type_info.test_value }}{{ field.type_info.test_func }},
324+ "{{ field.name }}": {{ field.type_info.test_value }}{{ field.type_info.test_func if field.type_info.test_func else '' }},
314325 {%- endif %}
315326 {%- endfor %}
316327 }
@@ -321,11 +332,19 @@ async def test_patch_{{ model.name }}(client: AsyncClient, daos: AllDAOs,) -> No
321332 db_{{ model.name }} = await daos.{{ model.name }}.filter_first(id={{ model.name }}.id)
322333
323334 assert db_{{ model.name }} is not None
324- {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key) %}
325- {%- if not field.primary_key and field.name.endswith('_id') %}
335+ {%- for field in model.fields if not (field.metadata.is_created_at_timestamp or field.metadata.is_updated_at_timestamp or field.primary_key or not field.type_info.test_value) %}
336+ {%- if not field.primary_key and field.metadata.is_foreign_key %}
337+ {%- if field.type_info.encapsulate_assert %}
338+ assert db_{{ model.name }}.{{ field.name }} == {{ field.type_info.encapsulate_assert }}(input_json["{{ field.name }}"])
339+ {%- else %}
326340 assert db_{{ model.name }}.{{ field.name }} == UUID(input_json["{{ field.name }}"])
341+ {%- endif %}
327342 {%- elif not field.primary_key %}
328- assert db_{{ model.name }}.{{ field.name }}{{ field.type_info.test_func }} == input_json["{{ field.name }}"]
343+ {%- if field.type_info.encapsulate_assert %}
344+ assert db_{{ model.name }}.{{ field.name }}{{ field.type_info.test_func if field.type_info.test_func else '' }} == {{ field.type_info.encapsulate_assert }}(input_json["{{ field.name }}"])
345+ {%- else %}
346+ assert db_{{ model.name }}.{{ field.name }}{{ field.type_info.test_func if field.type_info.test_func else '' }} == input_json["{{ field.name }}"]
347+ {%- endif %}
329348 {%- endif %}
330349 {%- endfor %}
331350
@@ -454,8 +473,8 @@ def render_custom_enums_to_enums(custom_enums: list[CustomEnum]) -> str:
454473 enum0 = CustomEnum (
455474 name = "MyEnum0" ,
456475 values = [
457- CustomEnumValue (name = "FoO" , value = "foo" ),
458- CustomEnumValue (name = "BAR" , value = "bar" ),
476+ # CustomEnumValue(name="FoO", value="foo"),
477+ # CustomEnumValue(name="BAR", value="bar"),
459478 ],
460479 )
461480
@@ -480,4 +499,4 @@ def render_custom_enums_to_enums(custom_enums: list[CustomEnum]) -> str:
480499 ),
481500 ],
482501 )
483- print (render_model_to_model (model ))
502+ print (render_model_to_post_test (model ))
0 commit comments