Skip to content

Commit a341133

Browse files
committed
tests cxonvertions
1 parent ac1af68 commit a341133

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

packages/models-library/tests/test_rest_ordering.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
ConfigDict,
1212
Field,
1313
Json,
14+
TypeAdapter,
1415
ValidationError,
1516
field_validator,
1617
)
@@ -47,6 +48,47 @@ def _validate_order_by_field(cls, v):
4748
)
4849

4950

51+
def test_conversion_order_by_from_query_to_domain_model():
52+
OrderQueryParamsModel = create_ordering_query_model_classes(
53+
ordering_fields={"modified_at", "name", "description"},
54+
default=OrderBy(field=IDStr("modified_at"), direction=OrderDirection.DESC),
55+
)
56+
57+
# normal
58+
data = {"order_by": {"field": "modified_at", "direction": "asc"}}
59+
query_model = OrderQueryParamsModel.model_validate(data)
60+
61+
expected_data = data["order_by"]
62+
63+
assert type(query_model.order_by) is not OrderBy
64+
assert isinstance(query_model.order_by, OrderBy)
65+
66+
# NOTE: This does NOT convert to OrderBy but has correct data
67+
order_by = TypeAdapter(OrderBy).validate_python(
68+
query_model.order_by, from_attributes=True
69+
)
70+
assert type(order_by) is not OrderBy
71+
assert order_by.model_dump(mode="json") == expected_data
72+
73+
order_by = OrderBy.model_validate(query_model.order_by.model_dump())
74+
assert type(order_by) is OrderBy
75+
assert order_by.model_dump(mode="json") == expected_data
76+
77+
# NOTE: This does NOT convert to OrderBy but has correct data
78+
order_by = OrderBy.model_validate(query_model.order_by, from_attributes=True)
79+
assert type(order_by) is not OrderBy
80+
assert order_by.model_dump(mode="json") == expected_data
81+
82+
order_by = OrderBy(**query_model.order_by.model_dump())
83+
assert type(order_by) is OrderBy
84+
assert order_by.model_dump(mode="json") == expected_data
85+
86+
# we should use this !!!
87+
order_by = OrderBy.model_construct(**query_model.order_by.model_dump())
88+
assert type(order_by) is OrderBy
89+
assert order_by.model_dump(mode="json") == expected_data
90+
91+
5092
def test_ordering_query_model_class_factory():
5193
BaseOrderingQueryModel = create_ordering_query_model_classes(
5294
ordering_fields={"modified_at", "name", "description"},

0 commit comments

Comments
 (0)