Coverage for tests / test_default_response_class_router.py: 100%
135 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
1from fastapi import APIRouter, FastAPI 1abcd
2from fastapi.responses import HTMLResponse, JSONResponse, PlainTextResponse 1abcd
3from fastapi.testclient import TestClient 1abcd
6class OverrideResponse(JSONResponse): 1abcd
7 media_type = "application/x-override" 1abcd
10app = FastAPI() 1abcd
11router_a = APIRouter() 1abcd
12router_a_a = APIRouter() 1abcd
13router_a_b_override = APIRouter() # Overrides default class 1abcd
14router_b_override = APIRouter() # Overrides default class 1abcd
15router_b_a = APIRouter() 1abcd
16router_b_a_c_override = APIRouter() # Overrides default class again 1abcd
19@app.get("/") 1abcd
20def get_root(): 1abcd
21 return {"msg": "Hello World"} 1efg
24@app.get("/override", response_class=PlainTextResponse) 1abcd
25def get_path_override(): 1abcd
26 return "Hello World" 1hij
29@router_a.get("/") 1abcd
30def get_a(): 1abcd
31 return {"msg": "Hello A"} 1klm
34@router_a.get("/override", response_class=PlainTextResponse) 1abcd
35def get_a_path_override(): 1abcd
36 return "Hello A" 1nop
39@router_a_a.get("/") 1abcd
40def get_a_a(): 1abcd
41 return {"msg": "Hello A A"} 1qrs
44@router_a_a.get("/override", response_class=PlainTextResponse) 1abcd
45def get_a_a_path_override(): 1abcd
46 return "Hello A A" 1tuv
49@router_a_b_override.get("/") 1abcd
50def get_a_b(): 1abcd
51 return "Hello A B" 1wxy
54@router_a_b_override.get("/override", response_class=HTMLResponse) 1abcd
55def get_a_b_path_override(): 1abcd
56 return "Hello A B" 1zAB
59@router_b_override.get("/") 1abcd
60def get_b(): 1abcd
61 return "Hello B" 1CDE
64@router_b_override.get("/override", response_class=HTMLResponse) 1abcd
65def get_b_path_override(): 1abcd
66 return "Hello B" 1FGH
69@router_b_a.get("/") 1abcd
70def get_b_a(): 1abcd
71 return "Hello B A" 1IJK
74@router_b_a.get("/override", response_class=HTMLResponse) 1abcd
75def get_b_a_path_override(): 1abcd
76 return "Hello B A" 1LMN
79@router_b_a_c_override.get("/") 1abcd
80def get_b_a_c(): 1abcd
81 return "Hello B A C" 1OPQ
84@router_b_a_c_override.get("/override", response_class=OverrideResponse) 1abcd
85def get_b_a_c_path_override(): 1abcd
86 return {"msg": "Hello B A C"} 1RST
89router_b_a.include_router( 1abcd
90 router_b_a_c_override, prefix="/c", default_response_class=HTMLResponse
91)
92router_b_override.include_router(router_b_a, prefix="/a") 1abcd
93router_a.include_router(router_a_a, prefix="/a") 1abcd
94router_a.include_router( 1abcd
95 router_a_b_override, prefix="/b", default_response_class=PlainTextResponse
96)
97app.include_router(router_a, prefix="/a") 1abcd
98app.include_router( 1abcd
99 router_b_override, prefix="/b", default_response_class=PlainTextResponse
100)
103client = TestClient(app) 1abcd
105json_type = "application/json" 1abcd
106text_type = "text/plain; charset=utf-8" 1abcd
107html_type = "text/html; charset=utf-8" 1abcd
108override_type = "application/x-override" 1abcd
111def test_app(): 1abcd
112 with client: 1efg
113 response = client.get("/") 1efg
114 assert response.json() == {"msg": "Hello World"} 1efg
115 assert response.headers["content-type"] == json_type 1efg
118def test_app_override(): 1abcd
119 with client: 1hij
120 response = client.get("/override") 1hij
121 assert response.content == b"Hello World" 1hij
122 assert response.headers["content-type"] == text_type 1hij
125def test_router_a(): 1abcd
126 with client: 1klm
127 response = client.get("/a") 1klm
128 assert response.json() == {"msg": "Hello A"} 1klm
129 assert response.headers["content-type"] == json_type 1klm
132def test_router_a_override(): 1abcd
133 with client: 1nop
134 response = client.get("/a/override") 1nop
135 assert response.content == b"Hello A" 1nop
136 assert response.headers["content-type"] == text_type 1nop
139def test_router_a_a(): 1abcd
140 with client: 1qrs
141 response = client.get("/a/a") 1qrs
142 assert response.json() == {"msg": "Hello A A"} 1qrs
143 assert response.headers["content-type"] == json_type 1qrs
146def test_router_a_a_override(): 1abcd
147 with client: 1tuv
148 response = client.get("/a/a/override") 1tuv
149 assert response.content == b"Hello A A" 1tuv
150 assert response.headers["content-type"] == text_type 1tuv
153def test_router_a_b(): 1abcd
154 with client: 1wxy
155 response = client.get("/a/b") 1wxy
156 assert response.content == b"Hello A B" 1wxy
157 assert response.headers["content-type"] == text_type 1wxy
160def test_router_a_b_override(): 1abcd
161 with client: 1zAB
162 response = client.get("/a/b/override") 1zAB
163 assert response.content == b"Hello A B" 1zAB
164 assert response.headers["content-type"] == html_type 1zAB
167def test_router_b(): 1abcd
168 with client: 1CDE
169 response = client.get("/b") 1CDE
170 assert response.content == b"Hello B" 1CDE
171 assert response.headers["content-type"] == text_type 1CDE
174def test_router_b_override(): 1abcd
175 with client: 1FGH
176 response = client.get("/b/override") 1FGH
177 assert response.content == b"Hello B" 1FGH
178 assert response.headers["content-type"] == html_type 1FGH
181def test_router_b_a(): 1abcd
182 with client: 1IJK
183 response = client.get("/b/a") 1IJK
184 assert response.content == b"Hello B A" 1IJK
185 assert response.headers["content-type"] == text_type 1IJK
188def test_router_b_a_override(): 1abcd
189 with client: 1LMN
190 response = client.get("/b/a/override") 1LMN
191 assert response.content == b"Hello B A" 1LMN
192 assert response.headers["content-type"] == html_type 1LMN
195def test_router_b_a_c(): 1abcd
196 with client: 1OPQ
197 response = client.get("/b/a/c") 1OPQ
198 assert response.content == b"Hello B A C" 1OPQ
199 assert response.headers["content-type"] == html_type 1OPQ
202def test_router_b_a_c_override(): 1abcd
203 with client: 1RST
204 response = client.get("/b/a/c/override") 1RST
205 assert response.json() == {"msg": "Hello B A C"} 1RST
206 assert response.headers["content-type"] == override_type 1RST