Skip to content

Commit 911f54e

Browse files
committed
fixes tests
1 parent a66b765 commit 911f54e

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

packages/models-library/src/models_library/rest_ordering.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,13 @@ def _check_if_ordering_field(cls, v):
7777
f"Fields supported are {msg_field_options}."
7878
)
7979
raise ValueError(msg)
80+
return v
8081

8182
@validator("field", allow_reuse=True, always=True)
8283
@classmethod
8384
def _post_rename_order_by_field_as_db_column(cls, v):
8485
# API field name -> DB column_name
85-
return ordering_fields_api_to_column_map.get(v, v)
86+
return ordering_fields_api_to_column_map.get(v) or v
8687

8788
order_by_example: dict[str, Any] = OrderBy.Config.schema_extra["example"]
8889
order_by_example_json = json_dumps(order_by_example)

packages/models-library/tests/test_rest_ordering.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ class ReferenceOrderQueryParamsClass(BaseModel):
1616

1717
# pylint: disable=unsubscriptable-object
1818
order_by: Json[OrderBy] = Field(
19-
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
19+
default=OrderBy(field=IDStr("modified_at"), direction=OrderDirection.DESC),
2020
description="Order by field (modified_at|name|description) and direction (asc|desc). The default sorting order is ascending.",
2121
example='{"field": "name", "direction": "desc"}',
22-
alias="order_by",
2322
)
2423

2524
@validator("order_by", check_fields=False)
@@ -33,7 +32,7 @@ def _validate_order_by_field(cls, v):
3332
msg = f"We do not support ordering by provided field {v.field}"
3433
raise ValueError(msg)
3534
if v.field == "modified_at":
36-
v.field = "modified"
35+
v.field = "modified_column"
3736
return v
3837

3938
class Config:
@@ -42,26 +41,21 @@ class Config:
4241

4342
def test_ordering_query_model_class_factory():
4443
BaseOrderingQueryModel = create_ordering_query_model_classes(
45-
ordering_fields={"modified", "name", "description"},
46-
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
44+
ordering_fields={"modified_at", "name", "description"},
45+
default=OrderBy(field=IDStr("modified_at"), direction=OrderDirection.DESC),
46+
ordering_fields_api_to_column_map={"modified_at": "modified_column"},
4747
)
4848

4949
# inherits to add extra post-validator
5050
class OrderQueryParamsModel(BaseOrderingQueryModel):
51-
@validator("order_by", pre=True)
52-
@classmethod
53-
def _validate_order_by_field(cls, v):
54-
# Adds aliases!?
55-
if v and v.get("field") == "modified_at":
56-
v["field"] = "modified"
57-
return v
51+
...
5852

5953
# normal
6054
data = {"order_by": {"field": "modified_at", "direction": "asc"}}
6155
model = OrderQueryParamsModel.parse_obj(data)
6256

6357
assert model.order_by
64-
assert model.order_by.dict() == {"field": "modified", "direction": "asc"}
58+
assert model.order_by.dict() == {"field": "modified_column", "direction": "asc"}
6559

6660
# test against reference
6761
expected = ReferenceOrderQueryParamsClass.parse_obj(
@@ -131,3 +125,14 @@ def test_ordering_query_model_class__defaults():
131125
error = err_info.value.errors()[0]
132126
assert error["loc"] == ("order_by", "field")
133127
assert error["type"] == "value_error.missing"
128+
129+
130+
def test_ordering_query_model_with_map():
131+
OrderQueryParamsModel = create_ordering_query_model_classes(
132+
ordering_fields={"modified", "name", "description"},
133+
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
134+
ordering_fields_api_to_column_map={"modified": "some_db_column_name"},
135+
)
136+
137+
model = OrderQueryParamsModel.parse_obj({"order_by": {"field": "modified"}})
138+
assert model.order_by.field == "some_db_column_name"

0 commit comments

Comments
 (0)