1
from fastapi import Depends, FastAPI, Security
2
from fastapi.testclient import TestClient
6
counter_holder = {"counter": 0}
9
async def dep_counter():
10
counter_holder["counter"] += 1
11
return counter_holder["counter"]
14
async def super_dep(count: int = Depends(dep_counter)):
19
async def get_counter(count: int = Depends(dep_counter)):
20
return {"counter": count}
23
@app.get("/sub-counter/")
24
async def get_sub_counter(
25
subcount: int = Depends(super_dep), count: int = Depends(dep_counter)
27
return {"counter": count, "subcounter": subcount}
30
@app.get("/sub-counter-no-cache/")
31
async def get_sub_counter_no_cache(
32
subcount: int = Depends(super_dep),
33
count: int = Depends(dep_counter, use_cache=False),
35
return {"counter": count, "subcounter": subcount}
38
@app.get("/scope-counter")
39
async def get_scope_counter(
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"]),
46
"scope_counter_1": scope_count_1,
47
"scope_counter_2": scope_count_2,
51
client = TestClient(app)
54
def test_normal_counter():
55
counter_holder["counter"] = 0
56
response = client.get("/counter/")
57
assert response.status_code == 200, response.text
58
assert response.json() == {"counter": 1}
59
response = client.get("/counter/")
60
assert response.status_code == 200, response.text
61
assert response.json() == {"counter": 2}
64
def test_sub_counter():
65
counter_holder["counter"] = 0
66
response = client.get("/sub-counter/")
67
assert response.status_code == 200, response.text
68
assert response.json() == {"counter": 1, "subcounter": 1}
69
response = client.get("/sub-counter/")
70
assert response.status_code == 200, response.text
71
assert response.json() == {"counter": 2, "subcounter": 2}
74
def test_sub_counter_no_cache():
75
counter_holder["counter"] = 0
76
response = client.get("/sub-counter-no-cache/")
77
assert response.status_code == 200, response.text
78
assert response.json() == {"counter": 2, "subcounter": 1}
79
response = client.get("/sub-counter-no-cache/")
80
assert response.status_code == 200, response.text
81
assert response.json() == {"counter": 4, "subcounter": 3}
84
def test_security_cache():
85
counter_holder["counter"] = 0
86
response = client.get("/scope-counter/")
87
assert response.status_code == 200, response.text
88
assert response.json() == {"counter": 1, "scope_counter_1": 2, "scope_counter_2": 2}
89
response = client.get("/scope-counter/")
90
assert response.status_code == 200, response.text
91
assert response.json() == {"counter": 3, "scope_counter_1": 4, "scope_counter_2": 4}