Coverage for tests / test_ambiguous_params.py: 100%
32 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
1from typing import Annotated 1defg
3import pytest 1defg
4from fastapi import Depends, FastAPI, Path 1defg
5from fastapi.param_functions import Query 1defg
6from fastapi.testclient import TestClient 1defg
8app = FastAPI() 1defg
11def test_no_annotated_defaults(): 1defg
12 with pytest.raises( 1hij
13 AssertionError, match="Path parameters cannot have a default value"
14 ):
16 @app.get("/items/{item_id}/") 1hij
17 async def get_item(item_id: Annotated[int, Path(default=1)]): 1hij
18 pass # pragma: nocover
20 with pytest.raises( 1hij
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("/") 1hij
29 async def get(item_id: Annotated[int, Query(default=1)]): 1hij
30 pass # pragma: nocover
33def test_multiple_annotations(): 1defg
34 async def dep(): 1abc
35 pass # pragma: nocover
37 @app.get("/multi-query") 1abc
38 async def get(foo: Annotated[int, Query(gt=2), Query(lt=10)]): 1abc
39 return foo 1abc
41 with pytest.raises( 1abc
42 AssertionError,
43 match=(
44 "Cannot specify `Depends` in `Annotated` and default value"
45 " together for 'foo'"
46 ),
47 ):
49 @app.get("/") 1abc
50 async def get2(foo: Annotated[int, Depends(dep)] = Depends(dep)): 1abc
51 pass # pragma: nocover
53 with pytest.raises( 1abc
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("/") 1abc
62 async def get3(foo: Annotated[int, Query(min_length=1)] = Depends(dep)): 1abc
63 pass # pragma: nocover
65 client = TestClient(app) 1abc
66 response = client.get("/multi-query", params={"foo": "5"}) 1abc
67 assert response.status_code == 200 1abc
68 assert response.json() == 5 1abc
70 response = client.get("/multi-query", params={"foo": "123"}) 1abc
71 assert response.status_code == 422 1abc
73 response = client.get("/multi-query", params={"foo": "1"}) 1abc
74 assert response.status_code == 422 1abc