Coverage for tests/test_response_code_no_body.py: 100%
28 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-05 00:03 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-05 00:03 +0000
1import typing 1abcdef
3from fastapi import FastAPI 1abcdef
4from fastapi.responses import JSONResponse 1abcdef
5from fastapi.testclient import TestClient 1abcdef
6from pydantic import BaseModel 1abcdef
8app = FastAPI() 1abcdef
11class JsonApiResponse(JSONResponse): 1abcdef
12 media_type = "application/vnd.api+json" 1abcdef
15class Error(BaseModel): 1abcdef
16 status: str 1abcdef
17 title: str 1abcdef
20class JsonApiError(BaseModel): 1abcdef
21 errors: typing.List[Error] 1abcdef
24@app.get( 1abcdef
25 "/a",
26 status_code=204,
27 response_class=JsonApiResponse,
28 responses={500: {"description": "Error", "model": JsonApiError}},
29)
30async def a(): 1abcdef
31 pass 1ghijkl
34@app.get("/b", responses={204: {"description": "No Content"}}) 1abcdef
35async def b(): 1abcdef
36 pass # pragma: no cover
39client = TestClient(app) 1abcdef
42def test_get_response(): 1abcdef
43 response = client.get("/a") 1ghijkl
44 assert response.status_code == 204, response.text 1ghijkl
45 assert "content-length" not in response.headers 1ghijkl
46 assert response.content == b"" 1ghijkl
49def test_openapi_schema(): 1abcdef
50 response = client.get("/openapi.json") 1mnopqr
51 assert response.status_code == 200, response.text 1mnopqr
52 assert response.json() == { 1mnopqr
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 }