Coverage for tests/test_ambiguous_params.py: 100%
34 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-08-08 03:53 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-08-08 03:53 +0000
1import pytest 1abcde
2from fastapi import Depends, FastAPI, Path 1abcde
3from fastapi.param_functions import Query 1abcde
4from fastapi.testclient import TestClient 1abcde
5from fastapi.utils import PYDANTIC_V2 1abcde
6from typing_extensions import Annotated 1abcde
8app = FastAPI() 1abcde
11def test_no_annotated_defaults(): 1abcde
12 with pytest.raises( 1abcde
13 AssertionError, match="Path parameters cannot have a default value"
14 ):
16 @app.get("/items/{item_id}/") 1abcde
17 async def get_item(item_id: Annotated[int, Path(default=1)]): 1abcde
18 pass # pragma: nocover
20 with pytest.raises( 1abcde
21 AssertionError,
22 match=(
23 "`Query` default value cannot be set in `Annotated` for 'item_id'. Set the"
24 " default value with `=` instead."
25 ),
26 ):
28 @app.get("/") 1abcde
29 async def get(item_id: Annotated[int, Query(default=1)]): 1abcde
30 pass # pragma: nocover
33def test_multiple_annotations(): 1abcde
34 async def dep(): 1abcde
35 pass # pragma: nocover
37 @app.get("/multi-query") 1abcde
38 async def get(foo: Annotated[int, Query(gt=2), Query(lt=10)]): 1abcde
39 return foo 1abcde
41 with pytest.raises( 1abcde
42 AssertionError,
43 match=(
44 "Cannot specify `Depends` in `Annotated` and default value"
45 " together for 'foo'"
46 ),
47 ):
49 @app.get("/") 1abcde
50 async def get2(foo: Annotated[int, Depends(dep)] = Depends(dep)): 1abcde
51 pass # pragma: nocover
53 with pytest.raises( 1abcde
54 AssertionError,
55 match=(
56 "Cannot specify a FastAPI annotation in `Annotated` and `Depends` as a"
57 " default value together for 'foo'"
58 ),
59 ):
61 @app.get("/") 1abcde
62 async def get3(foo: Annotated[int, Query(min_length=1)] = Depends(dep)): 1abcde
63 pass # pragma: nocover
65 client = TestClient(app) 1abcde
66 response = client.get("/multi-query", params={"foo": "5"}) 1abcde
67 assert response.status_code == 200 1abcde
68 assert response.json() == 5 1abcde
70 response = client.get("/multi-query", params={"foo": "123"}) 1abcde
71 assert response.status_code == 422 1abcde
73 if PYDANTIC_V2: 1abcde
74 response = client.get("/multi-query", params={"foo": "1"}) 1abcde
75 assert response.status_code == 422 1abcde