fastapi

Форк
0
/
test_validate_response.py 
84 строки · 2.0 Кб
1
from typing import List, Optional, Union
2

3
import pytest
4
from fastapi import FastAPI
5
from fastapi.exceptions import ResponseValidationError
6
from fastapi.testclient import TestClient
7
from pydantic import BaseModel
8

9
app = FastAPI()
10

11

12
class Item(BaseModel):
13
    name: str
14
    price: Optional[float] = None
15
    owner_ids: Optional[List[int]] = None
16

17

18
@app.get("/items/invalid", response_model=Item)
19
def get_invalid():
20
    return {"name": "invalid", "price": "foo"}
21

22

23
@app.get("/items/invalidnone", response_model=Item)
24
def get_invalid_none():
25
    return None
26

27

28
@app.get("/items/validnone", response_model=Union[Item, None])
29
def get_valid_none(send_none: bool = False):
30
    if send_none:
31
        return None
32
    else:
33
        return {"name": "invalid", "price": 3.2}
34

35

36
@app.get("/items/innerinvalid", response_model=Item)
37
def get_innerinvalid():
38
    return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]}
39

40

41
@app.get("/items/invalidlist", response_model=List[Item])
42
def get_invalidlist():
43
    return [
44
        {"name": "foo"},
45
        {"name": "bar", "price": "bar"},
46
        {"name": "baz", "price": "baz"},
47
    ]
48

49

50
client = TestClient(app)
51

52

53
def test_invalid():
54
    with pytest.raises(ResponseValidationError):
55
        client.get("/items/invalid")
56

57

58
def test_invalid_none():
59
    with pytest.raises(ResponseValidationError):
60
        client.get("/items/invalidnone")
61

62

63
def test_valid_none_data():
64
    response = client.get("/items/validnone")
65
    data = response.json()
66
    assert response.status_code == 200
67
    assert data == {"name": "invalid", "price": 3.2, "owner_ids": None}
68

69

70
def test_valid_none_none():
71
    response = client.get("/items/validnone", params={"send_none": "true"})
72
    data = response.json()
73
    assert response.status_code == 200
74
    assert data is None
75

76

77
def test_double_invalid():
78
    with pytest.raises(ResponseValidationError):
79
        client.get("/items/innerinvalid")
80

81

82
def test_invalid_list():
83
    with pytest.raises(ResponseValidationError):
84
        client.get("/items/invalidlist")
85

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

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

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

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