Coverage for tests / test_dependency_cache.py: 100%
54 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
1from fastapi import Depends, FastAPI, Security 1abcd
2from fastapi.testclient import TestClient 1abcd
4app = FastAPI() 1abcd
6counter_holder = {"counter": 0} 1abcd
9async def dep_counter(): 1abcd
10 counter_holder["counter"] += 1 1lmefngophiqrjk
11 return counter_holder["counter"] 1lmefngophiqrjk
14async def super_dep(count: int = Depends(dep_counter)): 1abcd
15 return count 1efsghijk
18@app.get("/counter/") 1abcd
19async def get_counter(count: int = Depends(dep_counter)): 1abcd
20 return {"counter": count} 1lnoq
23@app.get("/sub-counter/") 1abcd
24async def get_sub_counter( 1abcd
25 subcount: int = Depends(super_dep), count: int = Depends(dep_counter)
26):
27 return {"counter": count, "subcounter": subcount} 1fgik
30@app.get("/sub-counter-no-cache/") 1abcd
31async def get_sub_counter_no_cache( 1abcd
32 subcount: int = Depends(super_dep),
33 count: int = Depends(dep_counter, use_cache=False),
34):
35 return {"counter": count, "subcounter": subcount} 1eshj
38@app.get("/scope-counter") 1abcd
39async def get_scope_counter( 1abcd
40 count: int = Security(dep_counter),
41 scope_count_1: int = Security(dep_counter, scopes=["scope"]),
42 scope_count_2: int = Security(dep_counter, scopes=["scope"]),
43):
44 return { 1mtpr
45 "counter": count,
46 "scope_counter_1": scope_count_1,
47 "scope_counter_2": scope_count_2,
48 }
51client = TestClient(app) 1abcd
54def test_normal_counter(): 1abcd
55 counter_holder["counter"] = 0 1lnoq
56 response = client.get("/counter/") 1lnoq
57 assert response.status_code == 200, response.text 1lnoq
58 assert response.json() == {"counter": 1} 1lnoq
59 response = client.get("/counter/") 1lnoq
60 assert response.status_code == 200, response.text 1lnoq
61 assert response.json() == {"counter": 2} 1lnoq
64def test_sub_counter(): 1abcd
65 counter_holder["counter"] = 0 1fgik
66 response = client.get("/sub-counter/") 1fgik
67 assert response.status_code == 200, response.text 1fgik
68 assert response.json() == {"counter": 1, "subcounter": 1} 1fgik
69 response = client.get("/sub-counter/") 1fgik
70 assert response.status_code == 200, response.text 1fgik
71 assert response.json() == {"counter": 2, "subcounter": 2} 1fgik
74def test_sub_counter_no_cache(): 1abcd
75 counter_holder["counter"] = 0 1eshj
76 response = client.get("/sub-counter-no-cache/") 1eshj
77 assert response.status_code == 200, response.text 1eshj
78 assert response.json() == {"counter": 2, "subcounter": 1} 1eshj
79 response = client.get("/sub-counter-no-cache/") 1eshj
80 assert response.status_code == 200, response.text 1eshj
81 assert response.json() == {"counter": 4, "subcounter": 3} 1eshj
84def test_security_cache(): 1abcd
85 counter_holder["counter"] = 0 1mtpr
86 response = client.get("/scope-counter/") 1mtpr
87 assert response.status_code == 200, response.text 1mtpr
88 assert response.json() == {"counter": 1, "scope_counter_1": 2, "scope_counter_2": 2} 1mtpr
89 response = client.get("/scope-counter/") 1mtpr
90 assert response.status_code == 200, response.text 1mtpr
91 assert response.json() == {"counter": 3, "scope_counter_1": 4, "scope_counter_2": 4} 1mtpr