Coverage for tests/test_dependency_cache.py: 100%
54 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-05 00:03 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-05 00:03 +0000
1from fastapi import Depends, FastAPI, Security 1abcdef
2from fastapi.testclient import TestClient 1abcdef
4app = FastAPI() 1abcdef
6counter_holder = {"counter": 0} 1abcdef
9async def dep_counter(): 1abcdef
10 counter_holder["counter"] += 1 1stghuvijwxklyzmnABopCDqr
11 return counter_holder["counter"] 1stghuvijwxklyzmnABopCDqr
14async def super_dep(count: int = Depends(dep_counter)): 1abcdef
15 return count 1ghijklmnopqr
18@app.get("/counter/") 1abcdef
19async def get_counter(count: int = Depends(dep_counter)): 1abcdef
20 return {"counter": count} 1suwyAC
23@app.get("/sub-counter/") 1abcdef
24async def get_sub_counter( 1abcdef
25 subcount: int = Depends(super_dep), count: int = Depends(dep_counter)
26):
27 return {"counter": count, "subcounter": subcount} 1gikmoq
30@app.get("/sub-counter-no-cache/") 1abcdef
31async def get_sub_counter_no_cache( 1abcdef
32 subcount: int = Depends(super_dep),
33 count: int = Depends(dep_counter, use_cache=False),
34):
35 return {"counter": count, "subcounter": subcount} 1hjlnpr
38@app.get("/scope-counter") 1abcdef
39async def get_scope_counter( 1abcdef
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 { 1tvxzBD
45 "counter": count,
46 "scope_counter_1": scope_count_1,
47 "scope_counter_2": scope_count_2,
48 }
51client = TestClient(app) 1abcdef
54def test_normal_counter(): 1abcdef
55 counter_holder["counter"] = 0 1suwyAC
56 response = client.get("/counter/") 1suwyAC
57 assert response.status_code == 200, response.text 1suwyAC
58 assert response.json() == {"counter": 1} 1suwyAC
59 response = client.get("/counter/") 1suwyAC
60 assert response.status_code == 200, response.text 1suwyAC
61 assert response.json() == {"counter": 2} 1suwyAC
64def test_sub_counter(): 1abcdef
65 counter_holder["counter"] = 0 1gikmoq
66 response = client.get("/sub-counter/") 1gikmoq
67 assert response.status_code == 200, response.text 1gikmoq
68 assert response.json() == {"counter": 1, "subcounter": 1} 1gikmoq
69 response = client.get("/sub-counter/") 1gikmoq
70 assert response.status_code == 200, response.text 1gikmoq
71 assert response.json() == {"counter": 2, "subcounter": 2} 1gikmoq
74def test_sub_counter_no_cache(): 1abcdef
75 counter_holder["counter"] = 0 1hjlnpr
76 response = client.get("/sub-counter-no-cache/") 1hjlnpr
77 assert response.status_code == 200, response.text 1hjlnpr
78 assert response.json() == {"counter": 2, "subcounter": 1} 1hjlnpr
79 response = client.get("/sub-counter-no-cache/") 1hjlnpr
80 assert response.status_code == 200, response.text 1hjlnpr
81 assert response.json() == {"counter": 4, "subcounter": 3} 1hjlnpr
84def test_security_cache(): 1abcdef
85 counter_holder["counter"] = 0 1tvxzBD
86 response = client.get("/scope-counter/") 1tvxzBD
87 assert response.status_code == 200, response.text 1tvxzBD
88 assert response.json() == {"counter": 1, "scope_counter_1": 2, "scope_counter_2": 2} 1tvxzBD
89 response = client.get("/scope-counter/") 1tvxzBD
90 assert response.status_code == 200, response.text 1tvxzBD
91 assert response.json() == {"counter": 3, "scope_counter_1": 4, "scope_counter_2": 4} 1tvxzBD