Coverage for tests/test_response_code_no_body.py: 100%
28 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-08-08 03:53 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-08-08 03:53 +0000
1import typing 1abcde
3from fastapi import FastAPI 1abcde
4from fastapi.responses import JSONResponse 1abcde
5from fastapi.testclient import TestClient 1abcde
6from pydantic import BaseModel 1abcde
8app = FastAPI() 1abcde
11class JsonApiResponse(JSONResponse): 1abcde
12 media_type = "application/vnd.api+json" 1abcde
15class Error(BaseModel): 1abcde
16 status: str 1abcde
17 title: str 1abcde
20class JsonApiError(BaseModel): 1abcde
21 errors: typing.List[Error] 1abcde
24@app.get( 1abcde
25 "/a",
26 status_code=204,
27 response_class=JsonApiResponse,
28 responses={500: {"description": "Error", "model": JsonApiError}},
29)
30async def a(): 1abcde
31 pass 1abcde
34@app.get("/b", responses={204: {"description": "No Content"}}) 1abcde
35async def b(): 1abcde
36 pass # pragma: no cover
39client = TestClient(app) 1abcde
42def test_get_response(): 1abcde
43 response = client.get("/a") 1abcde
44 assert response.status_code == 204, response.text 1abcde
45 assert "content-length" not in response.headers 1abcde
46 assert response.content == b"" 1abcde
49def test_openapi_schema(): 1abcde
50 response = client.get("/openapi.json") 1abcde
51 assert response.status_code == 200, response.text 1abcde
52 assert response.json() == { 1abcde
53 "openapi": "3.1.0",
54 "info": {"title": "FastAPI", "version": "0.1.0"},
55 "paths": {
56 "/a": {
57 "get": {
58 "responses": {
59 "500": {
60 "description": "Error",
61 "content": {
62 "application/vnd.api+json": {
63 "schema": {
64 "$ref": "#/components/schemas/JsonApiError"
65 }
66 }
67 },
68 },
69 "204": {"description": "Successful Response"},
70 },
71 "summary": "A",
72 "operationId": "a_a_get",
73 }
74 },
75 "/b": {
76 "get": {
77 "responses": {
78 "204": {"description": "No Content"},
79 "200": {
80 "description": "Successful Response",
81 "content": {"application/json": {"schema": {}}},
82 },
83 },
84 "summary": "B",
85 "operationId": "b_b_get",
86 }
87 },
88 },
89 "components": {
90 "schemas": {
91 "Error": {
92 "title": "Error",
93 "required": ["status", "title"],
94 "type": "object",
95 "properties": {
96 "status": {"title": "Status", "type": "string"},
97 "title": {"title": "Title", "type": "string"},
98 },
99 },
100 "JsonApiError": {
101 "title": "JsonApiError",
102 "required": ["errors"],
103 "type": "object",
104 "properties": {
105 "errors": {
106 "title": "Errors",
107 "type": "array",
108 "items": {"$ref": "#/components/schemas/Error"},
109 }
110 },
111 },
112 }
113 },
114 }