Coverage for tests / test_dependency_overrides.py: 100%
155 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 Optional 1abcd
3import pytest 1abcd
4from fastapi import APIRouter, Depends, FastAPI 1abcd
5from fastapi.testclient import TestClient 1abcd
7app = FastAPI() 1abcd
9router = APIRouter() 1abcd
12async def common_parameters(q: str, skip: int = 0, limit: int = 100): 1abcd
13 return {"q": q, "skip": skip, "limit": limit} 1uvwxyzABCDEFGHIJKLMNOPQR
16@app.get("/main-depends/") 1abcd
17async def main_depends(commons: dict = Depends(common_parameters)): 1abcd
18 return {"in": "main-depends", "params": commons} 1wxfhEFeiMNgj
21@app.get("/decorator-depends/", dependencies=[Depends(common_parameters)]) 1abcd
22async def decorator_depends(): 1abcd
23 return {"in": "decorator-depends"} 1uvfkCDelKLgm
26@router.get("/router-depends/") 1abcd
27async def router_depends(commons: dict = Depends(common_parameters)): 1abcd
28 return {"in": "router-depends", "params": commons} 1fnABeoIJgpQR
31@router.get("/router-decorator-depends/", dependencies=[Depends(common_parameters)]) 1abcd
32async def router_decorator_depends(): 1abcd
33 return {"in": "router-decorator-depends"} 1fqyzerGHgsOP
36app.include_router(router) 1abcd
38client = TestClient(app) 1abcd
41async def overrider_dependency_simple(q: Optional[str] = None): 1abecd
42 return {"q": q, "skip": 5, "limit": 10} 1feg
45async def overrider_sub_dependency(k: str): 1abtcd
46 return {"k": k} 1khqnliromjsp
49async def overrider_dependency_with_sub(msg: dict = Depends(overrider_sub_dependency)): 1abtcd
50 return msg 1khqnliromjsp
53def test_main_depends(): 1abcd
54 response = client.get("/main-depends/") 1()*
55 assert response.status_code == 422 1()*
56 assert response.json() == { 1()*
57 "detail": [
58 {
59 "type": "missing",
60 "loc": ["query", "q"],
61 "msg": "Field required",
62 "input": None,
63 }
64 ]
65 }
68def test_main_depends_q_foo(): 1abcd
69 response = client.get("/main-depends/?q=foo") 1wEM
70 assert response.status_code == 200 1wEM
71 assert response.json() == { 1wEM
72 "in": "main-depends",
73 "params": {"q": "foo", "skip": 0, "limit": 100},
74 }
77def test_main_depends_q_foo_skip_100_limit_200(): 1abcd
78 response = client.get("/main-depends/?q=foo&skip=100&limit=200") 1xFN
79 assert response.status_code == 200 1xFN
80 assert response.json() == { 1xFN
81 "in": "main-depends",
82 "params": {"q": "foo", "skip": 100, "limit": 200},
83 }
86def test_decorator_depends(): 1abcd
87 response = client.get("/decorator-depends/") 1+,-
88 assert response.status_code == 422 1+,-
89 assert response.json() == { 1+,-
90 "detail": [
91 {
92 "type": "missing",
93 "loc": ["query", "q"],
94 "msg": "Field required",
95 "input": None,
96 }
97 ]
98 }
101def test_decorator_depends_q_foo(): 1abcd
102 response = client.get("/decorator-depends/?q=foo") 1uCK
103 assert response.status_code == 200 1uCK
104 assert response.json() == {"in": "decorator-depends"} 1uCK
107def test_decorator_depends_q_foo_skip_100_limit_200(): 1abcd
108 response = client.get("/decorator-depends/?q=foo&skip=100&limit=200") 1vDL
109 assert response.status_code == 200 1vDL
110 assert response.json() == {"in": "decorator-depends"} 1vDL
113def test_router_depends(): 1abcd
114 response = client.get("/router-depends/") 1./:
115 assert response.status_code == 422 1./:
116 assert response.json() == { 1./:
117 "detail": [
118 {
119 "type": "missing",
120 "loc": ["query", "q"],
121 "msg": "Field required",
122 "input": None,
123 }
124 ]
125 }
128def test_router_depends_q_foo(): 1abcd
129 response = client.get("/router-depends/?q=foo") 1AIQ
130 assert response.status_code == 200 1AIQ
131 assert response.json() == { 1AIQ
132 "in": "router-depends",
133 "params": {"q": "foo", "skip": 0, "limit": 100},
134 }
137def test_router_depends_q_foo_skip_100_limit_200(): 1abcd
138 response = client.get("/router-depends/?q=foo&skip=100&limit=200") 1BJR
139 assert response.status_code == 200 1BJR
140 assert response.json() == { 1BJR
141 "in": "router-depends",
142 "params": {"q": "foo", "skip": 100, "limit": 200},
143 }
146def test_router_decorator_depends(): 1abcd
147 response = client.get("/router-decorator-depends/") 1;=?
148 assert response.status_code == 422 1;=?
149 assert response.json() == { 1;=?
150 "detail": [
151 {
152 "type": "missing",
153 "loc": ["query", "q"],
154 "msg": "Field required",
155 "input": None,
156 }
157 ]
158 }
161def test_router_decorator_depends_q_foo(): 1abcd
162 response = client.get("/router-decorator-depends/?q=foo") 1yGO
163 assert response.status_code == 200 1yGO
164 assert response.json() == {"in": "router-decorator-depends"} 1yGO
167def test_router_decorator_depends_q_foo_skip_100_limit_200(): 1abcd
168 response = client.get("/router-decorator-depends/?q=foo&skip=100&limit=200") 1zHP
169 assert response.status_code == 200 1zHP
170 assert response.json() == {"in": "router-decorator-depends"} 1zHP
173@pytest.mark.parametrize( 1abcd
174 "url,status_code,expected",
175 [
176 (
177 "/main-depends/",
178 200,
179 {"in": "main-depends", "params": {"q": None, "skip": 5, "limit": 10}},
180 ),
181 (
182 "/main-depends/?q=foo",
183 200,
184 {"in": "main-depends", "params": {"q": "foo", "skip": 5, "limit": 10}},
185 ),
186 (
187 "/main-depends/?q=foo&skip=100&limit=200",
188 200,
189 {"in": "main-depends", "params": {"q": "foo", "skip": 5, "limit": 10}},
190 ),
191 ("/decorator-depends/", 200, {"in": "decorator-depends"}),
192 (
193 "/router-depends/",
194 200,
195 {"in": "router-depends", "params": {"q": None, "skip": 5, "limit": 10}},
196 ),
197 (
198 "/router-depends/?q=foo",
199 200,
200 {"in": "router-depends", "params": {"q": "foo", "skip": 5, "limit": 10}},
201 ),
202 (
203 "/router-depends/?q=foo&skip=100&limit=200",
204 200,
205 {"in": "router-depends", "params": {"q": "foo", "skip": 5, "limit": 10}},
206 ),
207 ("/router-decorator-depends/", 200, {"in": "router-decorator-depends"}),
208 ],
209)
210def test_override_simple(url, status_code, expected): 1abcd
211 app.dependency_overrides[common_parameters] = overrider_dependency_simple 1feg
212 response = client.get(url) 1feg
213 assert response.status_code == status_code 1feg
214 assert response.json() == expected 1feg
215 app.dependency_overrides = {} 1feg
218def test_override_with_sub_main_depends(): 1abcd
219 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1StT
220 response = client.get("/main-depends/") 1StT
221 assert response.status_code == 422 1StT
222 assert response.json() == { 1StT
223 "detail": [
224 {
225 "type": "missing",
226 "loc": ["query", "k"],
227 "msg": "Field required",
228 "input": None,
229 }
230 ]
231 }
233 app.dependency_overrides = {} 1StT
236def test_override_with_sub__main_depends_q_foo(): 1abcd
237 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1UVW
238 response = client.get("/main-depends/?q=foo") 1UVW
239 assert response.status_code == 422 1UVW
240 assert response.json() == { 1UVW
241 "detail": [
242 {
243 "type": "missing",
244 "loc": ["query", "k"],
245 "msg": "Field required",
246 "input": None,
247 }
248 ]
249 }
251 app.dependency_overrides = {} 1UVW
254def test_override_with_sub_main_depends_k_bar(): 1abcd
255 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1hij
256 response = client.get("/main-depends/?k=bar") 1hij
257 assert response.status_code == 200 1hij
258 assert response.json() == {"in": "main-depends", "params": {"k": "bar"}} 1hij
259 app.dependency_overrides = {} 1hij
262def test_override_with_sub_decorator_depends(): 1abcd
263 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1XYZ
264 response = client.get("/decorator-depends/") 1XYZ
265 assert response.status_code == 422 1XYZ
266 assert response.json() == { 1XYZ
267 "detail": [
268 {
269 "type": "missing",
270 "loc": ["query", "k"],
271 "msg": "Field required",
272 "input": None,
273 }
274 ]
275 }
277 app.dependency_overrides = {} 1XYZ
280def test_override_with_sub_decorator_depends_q_foo(): 1abcd
281 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1012
282 response = client.get("/decorator-depends/?q=foo") 1012
283 assert response.status_code == 422 1012
284 assert response.json() == { 1012
285 "detail": [
286 {
287 "type": "missing",
288 "loc": ["query", "k"],
289 "msg": "Field required",
290 "input": None,
291 }
292 ]
293 }
295 app.dependency_overrides = {} 1012
298def test_override_with_sub_decorator_depends_k_bar(): 1abcd
299 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1klm
300 response = client.get("/decorator-depends/?k=bar") 1klm
301 assert response.status_code == 200 1klm
302 assert response.json() == {"in": "decorator-depends"} 1klm
303 app.dependency_overrides = {} 1klm
306def test_override_with_sub_router_depends(): 1abcd
307 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1345
308 response = client.get("/router-depends/") 1345
309 assert response.status_code == 422 1345
310 assert response.json() == { 1345
311 "detail": [
312 {
313 "type": "missing",
314 "loc": ["query", "k"],
315 "msg": "Field required",
316 "input": None,
317 }
318 ]
319 }
321 app.dependency_overrides = {} 1345
324def test_override_with_sub_router_depends_q_foo(): 1abcd
325 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1678
326 response = client.get("/router-depends/?q=foo") 1678
327 assert response.status_code == 422 1678
328 assert response.json() == { 1678
329 "detail": [
330 {
331 "type": "missing",
332 "loc": ["query", "k"],
333 "msg": "Field required",
334 "input": None,
335 }
336 ]
337 }
339 app.dependency_overrides = {} 1678
342def test_override_with_sub_router_depends_k_bar(): 1abcd
343 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1nop
344 response = client.get("/router-depends/?k=bar") 1nop
345 assert response.status_code == 200 1nop
346 assert response.json() == {"in": "router-depends", "params": {"k": "bar"}} 1nop
347 app.dependency_overrides = {} 1nop
350def test_override_with_sub_router_decorator_depends(): 1abcd
351 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 19!#
352 response = client.get("/router-decorator-depends/") 19!#
353 assert response.status_code == 422 19!#
354 assert response.json() == { 19!#
355 "detail": [
356 {
357 "type": "missing",
358 "loc": ["query", "k"],
359 "msg": "Field required",
360 "input": None,
361 }
362 ]
363 }
365 app.dependency_overrides = {} 19!#
368def test_override_with_sub_router_decorator_depends_q_foo(): 1abcd
369 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1$%'
370 response = client.get("/router-decorator-depends/?q=foo") 1$%'
371 assert response.status_code == 422 1$%'
372 assert response.json() == { 1$%'
373 "detail": [
374 {
375 "type": "missing",
376 "loc": ["query", "k"],
377 "msg": "Field required",
378 "input": None,
379 }
380 ]
381 }
383 app.dependency_overrides = {} 1$%'
386def test_override_with_sub_router_decorator_depends_k_bar(): 1abcd
387 app.dependency_overrides[common_parameters] = overrider_dependency_with_sub 1qrs
388 response = client.get("/router-decorator-depends/?k=bar") 1qrs
389 assert response.status_code == 200 1qrs
390 assert response.json() == {"in": "router-decorator-depends"} 1qrs
391 app.dependency_overrides = {} 1qrs