Coverage for tests/test_query_cookie_header_model_extra_params.py: 100%

52 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-12-04 08:29 +0000

1from fastapi import Cookie, FastAPI, Header, Query 1abcdefg

2from fastapi._compat import PYDANTIC_V2 1abcdefg

3from fastapi.testclient import TestClient 1abcdefg

4from pydantic import BaseModel 1abcdefg

5 

6app = FastAPI() 1abcdefg

7 

8 

9class Model(BaseModel): 1abcdefg

10 param: str 1abcdefg

11 

12 if PYDANTIC_V2: 1abcdefg

13 model_config = {"extra": "allow"} 1abcdefg

14 else: 

15 

16 class Config: 1abcdef

17 extra = "allow" 1abcdef

18 

19 

20@app.get("/query") 1abcdefg

21async def query_model_with_extra(data: Model = Query()): 1abcdefg

22 return data 1CDEFGHIJKLMNOP

23 

24 

25@app.get("/header") 1abcdefg

26async def header_model_with_extra(data: Model = Header()): 1abcdefg

27 return data 1opqrstuvwxyzAB

28 

29 

30@app.get("/cookie") 1abcdefg

31async def cookies_model_with_extra(data: Model = Cookie()): 1abcdefg

32 return data 1hijklmn

33 

34 

35def test_query_pass_extra_list(): 1abcdefg

36 client = TestClient(app) 1CEGIKMO

37 resp = client.get( 1CEGIKMO

38 "/query", 

39 params={ 

40 "param": "123", 

41 "param2": ["456", "789"], # Pass a list of values as extra parameter 

42 }, 

43 ) 

44 assert resp.status_code == 200 1CEGIKMO

45 assert resp.json() == { 1CEGIKMO

46 "param": "123", 

47 "param2": ["456", "789"], 

48 } 

49 

50 

51def test_query_pass_extra_single(): 1abcdefg

52 client = TestClient(app) 1DFHJLNP

53 resp = client.get( 1DFHJLNP

54 "/query", 

55 params={ 

56 "param": "123", 

57 "param2": "456", 

58 }, 

59 ) 

60 assert resp.status_code == 200 1DFHJLNP

61 assert resp.json() == { 1DFHJLNP

62 "param": "123", 

63 "param2": "456", 

64 } 

65 

66 

67def test_header_pass_extra_list(): 1abcdefg

68 client = TestClient(app) 1oqsuwyA

69 

70 resp = client.get( 1oqsuwyA

71 "/header", 

72 headers=[ 

73 ("param", "123"), 

74 ("param2", "456"), # Pass a list of values as extra parameter 

75 ("param2", "789"), 

76 ], 

77 ) 

78 assert resp.status_code == 200 1oqsuwyA

79 resp_json = resp.json() 1oqsuwyA

80 assert "param2" in resp_json 1oqsuwyA

81 assert resp_json["param2"] == ["456", "789"] 1oqsuwyA

82 

83 

84def test_header_pass_extra_single(): 1abcdefg

85 client = TestClient(app) 1prtvxzB

86 

87 resp = client.get( 1prtvxzB

88 "/header", 

89 headers=[ 

90 ("param", "123"), 

91 ("param2", "456"), 

92 ], 

93 ) 

94 assert resp.status_code == 200 1prtvxzB

95 resp_json = resp.json() 1prtvxzB

96 assert "param2" in resp_json 1prtvxzB

97 assert resp_json["param2"] == "456" 1prtvxzB

98 

99 

100def test_cookie_pass_extra_list(): 1abcdefg

101 client = TestClient(app) 1hijklmn

102 client.cookies = [ 1hijklmn

103 ("param", "123"), 

104 ("param2", "456"), # Pass a list of values as extra parameter 

105 ("param2", "789"), 

106 ] 

107 resp = client.get("/cookie") 1hijklmn

108 assert resp.status_code == 200 1hijklmn

109 resp_json = resp.json() 1hijklmn

110 assert "param2" in resp_json 1hijklmn

111 assert resp_json["param2"] == "789" # Cookies only keep the last value 1hijklmn