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

1from typing import Annotated 1defg

2 

3import pytest 1defg

4from fastapi import Depends, FastAPI, Path 1defg

5from fastapi.param_functions import Query 1defg

6from fastapi.testclient import TestClient 1defg

7 

8app = FastAPI() 1defg

9 

10 

11def test_no_annotated_defaults(): 1defg

12 with pytest.raises( 1hij

13 AssertionError, match="Path parameters cannot have a default value" 

14 ): 

15 

16 @app.get("/items/{item_id}/") 1hij

17 async def get_item(item_id: Annotated[int, Path(default=1)]): 1hij

18 pass # pragma: nocover 

19 

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 ): 

27 

28 @app.get("/") 1hij

29 async def get(item_id: Annotated[int, Query(default=1)]): 1hij

30 pass # pragma: nocover 

31 

32 

33def test_multiple_annotations(): 1defg

34 async def dep(): 1abc

35 pass # pragma: nocover 

36 

37 @app.get("/multi-query") 1abc

38 async def get(foo: Annotated[int, Query(gt=2), Query(lt=10)]): 1abc

39 return foo 1abc

40 

41 with pytest.raises( 1abc

42 AssertionError, 

43 match=( 

44 "Cannot specify `Depends` in `Annotated` and default value" 

45 " together for 'foo'" 

46 ), 

47 ): 

48 

49 @app.get("/") 1abc

50 async def get2(foo: Annotated[int, Depends(dep)] = Depends(dep)): 1abc

51 pass # pragma: nocover 

52 

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 ): 

60 

61 @app.get("/") 1abc

62 async def get3(foo: Annotated[int, Query(min_length=1)] = Depends(dep)): 1abc

63 pass # pragma: nocover 

64 

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

69 

70 response = client.get("/multi-query", params={"foo": "123"}) 1abc

71 assert response.status_code == 422 1abc

72 

73 response = client.get("/multi-query", params={"foo": "1"}) 1abc

74 assert response.status_code == 422 1abc