fastapi

Форк
0
/
test_ambiguous_params.py 
75 строк · 2.1 Кб
1
import pytest
2
from fastapi import Depends, FastAPI, Path
3
from fastapi.param_functions import Query
4
from fastapi.testclient import TestClient
5
from fastapi.utils import PYDANTIC_V2
6
from typing_extensions import Annotated
7

8
app = FastAPI()
9

10

11
def test_no_annotated_defaults():
12
    with pytest.raises(
13
        AssertionError, match="Path parameters cannot have a default value"
14
    ):
15

16
        @app.get("/items/{item_id}/")
17
        async def get_item(item_id: Annotated[int, Path(default=1)]):
18
            pass  # pragma: nocover
19

20
    with pytest.raises(
21
        AssertionError,
22
        match=(
23
            "`Query` default value cannot be set in `Annotated` for 'item_id'. Set the"
24
            " default value with `=` instead."
25
        ),
26
    ):
27

28
        @app.get("/")
29
        async def get(item_id: Annotated[int, Query(default=1)]):
30
            pass  # pragma: nocover
31

32

33
def test_multiple_annotations():
34
    async def dep():
35
        pass  # pragma: nocover
36

37
    @app.get("/multi-query")
38
    async def get(foo: Annotated[int, Query(gt=2), Query(lt=10)]):
39
        return foo
40

41
    with pytest.raises(
42
        AssertionError,
43
        match=(
44
            "Cannot specify `Depends` in `Annotated` and default value"
45
            " together for 'foo'"
46
        ),
47
    ):
48

49
        @app.get("/")
50
        async def get2(foo: Annotated[int, Depends(dep)] = Depends(dep)):
51
            pass  # pragma: nocover
52

53
    with pytest.raises(
54
        AssertionError,
55
        match=(
56
            "Cannot specify a FastAPI annotation in `Annotated` and `Depends` as a"
57
            " default value together for 'foo'"
58
        ),
59
    ):
60

61
        @app.get("/")
62
        async def get3(foo: Annotated[int, Query(min_length=1)] = Depends(dep)):
63
            pass  # pragma: nocover
64

65
    client = TestClient(app)
66
    response = client.get("/multi-query", params={"foo": "5"})
67
    assert response.status_code == 200
68
    assert response.json() == 5
69

70
    response = client.get("/multi-query", params={"foo": "123"})
71
    assert response.status_code == 422
72

73
    if PYDANTIC_V2:
74
        response = client.get("/multi-query", params={"foo": "1"})
75
        assert response.status_code == 422
76

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

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

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

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