Coverage for tests/test_default_response_class.py: 100%

141 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-12-04 08:29 +0000

1from typing import Any 1abcdefg

2 

3import orjson 1abcdefg

4from fastapi import APIRouter, FastAPI 1abcdefg

5from fastapi.responses import HTMLResponse, JSONResponse, PlainTextResponse 1abcdefg

6from fastapi.testclient import TestClient 1abcdefg

7 

8 

9class ORJSONResponse(JSONResponse): 1abcdefg

10 media_type = "application/x-orjson" 1abcdefg

11 

12 def render(self, content: Any) -> bytes: 1abcdefg

13 return orjson.dumps(content) 1hijklmnopqrstuvwxyzAB

14 

15 

16class OverrideResponse(JSONResponse): 1abcdefg

17 media_type = "application/x-override" 1abcdefg

18 

19 

20app = FastAPI(default_response_class=ORJSONResponse) 1abcdefg

21router_a = APIRouter() 1abcdefg

22router_a_a = APIRouter() 1abcdefg

23router_a_b_override = APIRouter() # Overrides default class 1abcdefg

24router_b_override = APIRouter() # Overrides default class 1abcdefg

25router_b_a = APIRouter() 1abcdefg

26router_b_a_c_override = APIRouter() # Overrides default class again 1abcdefg

27 

28 

29@app.get("/") 1abcdefg

30def get_root(): 1abcdefg

31 return {"msg": "Hello World"} 1hknqtwz

32 

33 

34@app.get("/override", response_class=PlainTextResponse) 1abcdefg

35def get_path_override(): 1abcdefg

36 return "Hello World" 1CDEFGHI

37 

38 

39@router_a.get("/") 1abcdefg

40def get_a(): 1abcdefg

41 return {"msg": "Hello A"} 1iloruxA

42 

43 

44@router_a.get("/override", response_class=PlainTextResponse) 1abcdefg

45def get_a_path_override(): 1abcdefg

46 return "Hello A" 1JKLMNOP

47 

48 

49@router_a_a.get("/") 1abcdefg

50def get_a_a(): 1abcdefg

51 return {"msg": "Hello A A"} 1jmpsvyB

52 

53 

54@router_a_a.get("/override", response_class=PlainTextResponse) 1abcdefg

55def get_a_a_path_override(): 1abcdefg

56 return "Hello A A" 1QRSTUVW

57 

58 

59@router_a_b_override.get("/") 1abcdefg

60def get_a_b(): 1abcdefg

61 return "Hello A B" 1XYZ0123

62 

63 

64@router_a_b_override.get("/override", response_class=HTMLResponse) 1abcdefg

65def get_a_b_path_override(): 1abcdefg

66 return "Hello A B" 1456789!

67 

68 

69@router_b_override.get("/") 1abcdefg

70def get_b(): 1abcdefg

71 return "Hello B" 1#$%'()*

72 

73 

74@router_b_override.get("/override", response_class=HTMLResponse) 1abcdefg

75def get_b_path_override(): 1abcdefg

76 return "Hello B" 1+,-./:;

77 

78 

79@router_b_a.get("/") 1abcdefg

80def get_b_a(): 1abcdefg

81 return "Hello B A" 1=?@[]^_

82 

83 

84@router_b_a.get("/override", response_class=HTMLResponse) 1abcdefg

85def get_b_a_path_override(): 1abcdefg

86 return "Hello B A" 2` { | } ~ abbb

87 

88 

89@router_b_a_c_override.get("/") 1abcdefg

90def get_b_a_c(): 1abcdefg

91 return "Hello B A C" 2cbdbebfbgbhbib

92 

93 

94@router_b_a_c_override.get("/override", response_class=OverrideResponse) 1abcdefg

95def get_b_a_c_path_override(): 1abcdefg

96 return {"msg": "Hello B A C"} 2jbkblbmbnbobpb

97 

98 

99router_b_a.include_router( 1abcdefg

100 router_b_a_c_override, prefix="/c", default_response_class=HTMLResponse 

101) 

102router_b_override.include_router(router_b_a, prefix="/a") 1abcdefg

103router_a.include_router(router_a_a, prefix="/a") 1abcdefg

104router_a.include_router( 1abcdefg

105 router_a_b_override, prefix="/b", default_response_class=PlainTextResponse 

106) 

107app.include_router(router_a, prefix="/a") 1abcdefg

108app.include_router( 1abcdefg

109 router_b_override, prefix="/b", default_response_class=PlainTextResponse 

110) 

111 

112 

113client = TestClient(app) 1abcdefg

114 

115orjson_type = "application/x-orjson" 1abcdefg

116text_type = "text/plain; charset=utf-8" 1abcdefg

117html_type = "text/html; charset=utf-8" 1abcdefg

118override_type = "application/x-override" 1abcdefg

119 

120 

121def test_app(): 1abcdefg

122 with client: 1hknqtwz

123 response = client.get("/") 1hknqtwz

124 assert response.json() == {"msg": "Hello World"} 1hknqtwz

125 assert response.headers["content-type"] == orjson_type 1hknqtwz

126 

127 

128def test_app_override(): 1abcdefg

129 with client: 1CDEFGHI

130 response = client.get("/override") 1CDEFGHI

131 assert response.content == b"Hello World" 1CDEFGHI

132 assert response.headers["content-type"] == text_type 1CDEFGHI

133 

134 

135def test_router_a(): 1abcdefg

136 with client: 1iloruxA

137 response = client.get("/a") 1iloruxA

138 assert response.json() == {"msg": "Hello A"} 1iloruxA

139 assert response.headers["content-type"] == orjson_type 1iloruxA

140 

141 

142def test_router_a_override(): 1abcdefg

143 with client: 1JKLMNOP

144 response = client.get("/a/override") 1JKLMNOP

145 assert response.content == b"Hello A" 1JKLMNOP

146 assert response.headers["content-type"] == text_type 1JKLMNOP

147 

148 

149def test_router_a_a(): 1abcdefg

150 with client: 1jmpsvyB

151 response = client.get("/a/a") 1jmpsvyB

152 assert response.json() == {"msg": "Hello A A"} 1jmpsvyB

153 assert response.headers["content-type"] == orjson_type 1jmpsvyB

154 

155 

156def test_router_a_a_override(): 1abcdefg

157 with client: 1QRSTUVW

158 response = client.get("/a/a/override") 1QRSTUVW

159 assert response.content == b"Hello A A" 1QRSTUVW

160 assert response.headers["content-type"] == text_type 1QRSTUVW

161 

162 

163def test_router_a_b(): 1abcdefg

164 with client: 1XYZ0123

165 response = client.get("/a/b") 1XYZ0123

166 assert response.content == b"Hello A B" 1XYZ0123

167 assert response.headers["content-type"] == text_type 1XYZ0123

168 

169 

170def test_router_a_b_override(): 1abcdefg

171 with client: 1456789!

172 response = client.get("/a/b/override") 1456789!

173 assert response.content == b"Hello A B" 1456789!

174 assert response.headers["content-type"] == html_type 1456789!

175 

176 

177def test_router_b(): 1abcdefg

178 with client: 1#$%'()*

179 response = client.get("/b") 1#$%'()*

180 assert response.content == b"Hello B" 1#$%'()*

181 assert response.headers["content-type"] == text_type 1#$%'()*

182 

183 

184def test_router_b_override(): 1abcdefg

185 with client: 1+,-./:;

186 response = client.get("/b/override") 1+,-./:;

187 assert response.content == b"Hello B" 1+,-./:;

188 assert response.headers["content-type"] == html_type 1+,-./:;

189 

190 

191def test_router_b_a(): 1abcdefg

192 with client: 1=?@[]^_

193 response = client.get("/b/a") 1=?@[]^_

194 assert response.content == b"Hello B A" 1=?@[]^_

195 assert response.headers["content-type"] == text_type 1=?@[]^_

196 

197 

198def test_router_b_a_override(): 1abcdefg

199 with client: 2` { | } ~ abbb

200 response = client.get("/b/a/override") 2` { | } ~ abbb

201 assert response.content == b"Hello B A" 2` { | } ~ abbb

202 assert response.headers["content-type"] == html_type 2` { | } ~ abbb

203 

204 

205def test_router_b_a_c(): 1abcdefg

206 with client: 2cbdbebfbgbhbib

207 response = client.get("/b/a/c") 2cbdbebfbgbhbib

208 assert response.content == b"Hello B A C" 2cbdbebfbgbhbib

209 assert response.headers["content-type"] == html_type 2cbdbebfbgbhbib

210 

211 

212def test_router_b_a_c_override(): 1abcdefg

213 with client: 2jbkblbmbnbobpb

214 response = client.get("/b/a/c/override") 2jbkblbmbnbobpb

215 assert response.json() == {"msg": "Hello B A C"} 2jbkblbmbnbobpb

216 assert response.headers["content-type"] == override_type 2jbkblbmbnbobpb