fastapi

Форк
0
/
test_dependency_cache.py 
91 строка · 2.7 Кб
1
from fastapi import Depends, FastAPI, Security
2
from fastapi.testclient import TestClient
3

4
app = FastAPI()
5

6
counter_holder = {"counter": 0}
7

8

9
async def dep_counter():
10
    counter_holder["counter"] += 1
11
    return counter_holder["counter"]
12

13

14
async def super_dep(count: int = Depends(dep_counter)):
15
    return count
16

17

18
@app.get("/counter/")
19
async def get_counter(count: int = Depends(dep_counter)):
20
    return {"counter": count}
21

22

23
@app.get("/sub-counter/")
24
async def get_sub_counter(
25
    subcount: int = Depends(super_dep), count: int = Depends(dep_counter)
26
):
27
    return {"counter": count, "subcounter": subcount}
28

29

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),
34
):
35
    return {"counter": count, "subcounter": subcount}
36

37

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"]),
43
):
44
    return {
45
        "counter": count,
46
        "scope_counter_1": scope_count_1,
47
        "scope_counter_2": scope_count_2,
48
    }
49

50

51
client = TestClient(app)
52

53

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}
62

63

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}
72

73

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}
82

83

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}
92

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.