Skip to content

Commit 25c3b00

Browse files
committed
test query instead of body
1 parent daa8122 commit 25c3b00

File tree

1 file changed

+59
-40
lines changed

1 file changed

+59
-40
lines changed

tests/unit/test_core.py

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class ValidateParams(NamedTuple):
2727
response_model: Type[BaseModel] = EmptyModel
2828
on_success_status: int = 200
2929
request_query: ImmutableMultiDict = ImmutableMultiDict({})
30+
flat_request_query: bool = True
3031
request_body: Union[dict, List[dict]] = {}
3132
request_form: ImmutableMultiDict = ImmutableMultiDict({})
3233
expected_response_body: Optional[dict] = None
@@ -58,7 +59,7 @@ class FormModel(BaseModel):
5859
f2: Optional[str] = None
5960

6061

61-
class RequestBodyWithIterableModel(BaseModel):
62+
class RequestWithIterableModel(BaseModel):
6263
b1: List
6364
b2: List[str]
6465
b3: Tuple[str, int]
@@ -68,7 +69,7 @@ class RequestBodyWithIterableModel(BaseModel):
6869

6970
if sys.version_info >= (3, 10):
7071
# New Python(>=3.10) syntax tests
71-
class RequestBodyWithIterableModelPy310(BaseModel):
72+
class RequestWithIterableModelPy310(BaseModel):
7273
b1: list
7374
b2: list[str]
7475
b3: tuple[str, int]
@@ -220,25 +221,34 @@ class RequestBodyModelRoot(RootModel):
220221
),
221222
pytest.param(
222223
ValidateParams(
223-
body_model=RequestBodyWithIterableModel,
224-
request_body={
225-
"b1": ["str1", "str2"],
226-
"b2": ["str1", "str2"],
227-
"b3": ("str", 123),
228-
"b4": [1, 2, 3],
229-
"b5": ("str", 321),
230-
},
224+
request_query=ImmutableMultiDict(
225+
[
226+
("b1", "str1"),
227+
("b1", "str2"),
228+
("b2", "str1"),
229+
("b2", "str2"),
230+
("b3", "str"),
231+
("b3", 123),
232+
("b4", 1),
233+
("b4", 2),
234+
("b4", 3),
235+
("b5", "str"),
236+
("b5", 321),
237+
]
238+
),
239+
flat_request_query=False,
231240
expected_response_body={
232241
"b1": ["str1", "str2"],
233242
"b2": ["str1", "str2"],
234243
"b3": ("str", 123),
235244
"b4": [1, 2, 3],
236245
"b5": ("str", 321),
237246
},
238-
response_model=RequestBodyWithIterableModel,
247+
query_model=RequestWithIterableModel,
248+
response_model=RequestWithIterableModel,
239249
expected_status_code=200,
240250
),
241-
id="iterable and Optional[Iterable] fields in pydantic model",
251+
id="iterable and Optional[Iterable] fields in pydantic model in query",
242252
),
243253
]
244254

@@ -247,25 +257,34 @@ class RequestBodyModelRoot(RootModel):
247257
[
248258
pytest.param(
249259
ValidateParams(
250-
body_model=RequestBodyWithIterableModelPy310,
251-
request_body={
252-
"b1": ["str1", "str2"],
253-
"b2": ["str1", "str2"],
254-
"b3": ("str", 123),
255-
"b4": [1, 2, 3],
256-
"b5": ("str", 321),
257-
},
260+
request_query=ImmutableMultiDict(
261+
[
262+
("b1", "str1"),
263+
("b1", "str2"),
264+
("b2", "str1"),
265+
("b2", "str2"),
266+
("b3", "str"),
267+
("b3", 123),
268+
("b4", 1),
269+
("b4", 2),
270+
("b4", 3),
271+
("b5", "str"),
272+
("b5", 321),
273+
]
274+
),
275+
flat_request_query=False,
258276
expected_response_body={
259277
"b1": ["str1", "str2"],
260278
"b2": ["str1", "str2"],
261279
"b3": ("str", 123),
262280
"b4": [1, 2, 3],
263281
"b5": ("str", 321),
264282
},
265-
response_model=RequestBodyWithIterableModelPy310,
283+
query_model=RequestWithIterableModelPy310,
284+
response_model=RequestWithIterableModelPy310,
266285
expected_status_code=200,
267286
),
268-
id="iterable and Iterable | None fields in pydantic model (Python 3.10+)",
287+
id="iterable and Iterable | None fields in pydantic model in query (Python 3.10+)",
269288
),
270289
]
271290
)
@@ -303,17 +322,17 @@ def f():
303322
assert response.status_code == parameters.expected_status_code
304323
assert_matches(parameters.expected_response_body, response.json)
305324
if 200 <= response.status_code < 300:
306-
assert (
325+
assert_matches(
326+
parameters.request_body,
307327
mock_request.body_params.model_dump(
308328
exclude_none=True, exclude_defaults=True
309-
)
310-
== parameters.request_body
329+
),
311330
)
312-
assert (
331+
assert_matches(
332+
parameters.request_query.to_dict(flat=parameters.flat_request_query),
313333
mock_request.query_params.model_dump(
314334
exclude_none=True, exclude_defaults=True
315-
)
316-
== parameters.request_query.to_dict()
335+
),
317336
)
318337

319338
@pytest.mark.parametrize("parameters", validate_test_cases)
@@ -342,17 +361,17 @@ def f(
342361
assert_matches(parameters.expected_response_body, response.json)
343362
assert response.status_code == parameters.expected_status_code
344363
if 200 <= response.status_code < 300:
345-
assert (
364+
assert_matches(
365+
parameters.request_body,
346366
mock_request.body_params.model_dump(
347367
exclude_none=True, exclude_defaults=True
348-
)
349-
== parameters.request_body
368+
),
350369
)
351-
assert (
370+
assert_matches(
371+
parameters.request_query.to_dict(flat=parameters.flat_request_query),
352372
mock_request.query_params.model_dump(
353373
exclude_none=True, exclude_defaults=True
354-
)
355-
== parameters.request_query.to_dict()
374+
),
356375
)
357376

358377
@pytest.mark.usefixtures("request_ctx")
@@ -541,17 +560,17 @@ def f() -> Any:
541560
assert response.status_code == parameters.expected_status_code
542561
assert_matches(parameters.expected_response_body, response.json)
543562
if 200 <= response.status_code < 300:
544-
assert (
563+
assert_matches(
564+
parameters.request_body,
545565
mock_request.body_params.model_dump(
546566
exclude_none=True, exclude_defaults=True
547-
)
548-
== parameters.request_body
567+
),
549568
)
550-
assert (
569+
assert_matches(
570+
parameters.request_query.to_dict(flat=parameters.flat_request_query),
551571
mock_request.query_params.model_dump(
552572
exclude_none=True, exclude_defaults=True
553-
)
554-
== parameters.request_query.to_dict()
573+
),
555574
)
556575

557576
def test_fail_validation_custom_status_code(self, app, request_ctx, mocker):

0 commit comments

Comments
 (0)