fastapi

Форк
0
/
test_additional_responses_custom_validationerror.py 
99 строк · 2.9 Кб
1
import typing
2

3
from fastapi import FastAPI
4
from fastapi.responses import JSONResponse
5
from fastapi.testclient import TestClient
6
from pydantic import BaseModel
7

8
app = FastAPI()
9

10

11
class JsonApiResponse(JSONResponse):
12
    media_type = "application/vnd.api+json"
13

14

15
class Error(BaseModel):
16
    status: str
17
    title: str
18

19

20
class JsonApiError(BaseModel):
21
    errors: typing.List[Error]
22

23

24
@app.get(
25
    "/a/{id}",
26
    response_class=JsonApiResponse,
27
    responses={422: {"description": "Error", "model": JsonApiError}},
28
)
29
async def a(id):
30
    pass  # pragma: no cover
31

32

33
client = TestClient(app)
34

35

36
def test_openapi_schema():
37
    response = client.get("/openapi.json")
38
    assert response.status_code == 200, response.text
39
    assert response.json() == {
40
        "openapi": "3.1.0",
41
        "info": {"title": "FastAPI", "version": "0.1.0"},
42
        "paths": {
43
            "/a/{id}": {
44
                "get": {
45
                    "responses": {
46
                        "422": {
47
                            "description": "Error",
48
                            "content": {
49
                                "application/vnd.api+json": {
50
                                    "schema": {
51
                                        "$ref": "#/components/schemas/JsonApiError"
52
                                    }
53
                                }
54
                            },
55
                        },
56
                        "200": {
57
                            "description": "Successful Response",
58
                            "content": {"application/vnd.api+json": {"schema": {}}},
59
                        },
60
                    },
61
                    "summary": "A",
62
                    "operationId": "a_a__id__get",
63
                    "parameters": [
64
                        {
65
                            "required": True,
66
                            "schema": {"title": "Id"},
67
                            "name": "id",
68
                            "in": "path",
69
                        }
70
                    ],
71
                }
72
            }
73
        },
74
        "components": {
75
            "schemas": {
76
                "Error": {
77
                    "title": "Error",
78
                    "required": ["status", "title"],
79
                    "type": "object",
80
                    "properties": {
81
                        "status": {"title": "Status", "type": "string"},
82
                        "title": {"title": "Title", "type": "string"},
83
                    },
84
                },
85
                "JsonApiError": {
86
                    "title": "JsonApiError",
87
                    "required": ["errors"],
88
                    "type": "object",
89
                    "properties": {
90
                        "errors": {
91
                            "title": "Errors",
92
                            "type": "array",
93
                            "items": {"$ref": "#/components/schemas/Error"},
94
                        }
95
                    },
96
                },
97
            }
98
        },
99
    }
100

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

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

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

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