Coverage for tests/test_default_response_class_router.py: 100%

135 statements  

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

1from fastapi import APIRouter, FastAPI 1abcdefg

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

3from fastapi.testclient import TestClient 1abcdefg

4 

5 

6class OverrideResponse(JSONResponse): 1abcdefg

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

8 

9 

10app = FastAPI() 1abcdefg

11router_a = APIRouter() 1abcdefg

12router_a_a = APIRouter() 1abcdefg

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

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

15router_b_a = APIRouter() 1abcdefg

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

17 

18 

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

20def get_root(): 1abcdefg

21 return {"msg": "Hello World"} 1hijklmn

22 

23 

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

25def get_path_override(): 1abcdefg

26 return "Hello World" 1opqrstu

27 

28 

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

30def get_a(): 1abcdefg

31 return {"msg": "Hello A"} 1vwxyzAB

32 

33 

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

35def get_a_path_override(): 1abcdefg

36 return "Hello A" 1CDEFGHI

37 

38 

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

40def get_a_a(): 1abcdefg

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

42 

43 

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

45def get_a_a_path_override(): 1abcdefg

46 return "Hello A A" 1QRSTUVW

47 

48 

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

50def get_a_b(): 1abcdefg

51 return "Hello A B" 1XYZ0123

52 

53 

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

55def get_a_b_path_override(): 1abcdefg

56 return "Hello A B" 1456789!

57 

58 

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

60def get_b(): 1abcdefg

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

62 

63 

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

65def get_b_path_override(): 1abcdefg

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

67 

68 

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

70def get_b_a(): 1abcdefg

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

72 

73 

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

75def get_b_a_path_override(): 1abcdefg

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

77 

78 

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

80def get_b_a_c(): 1abcdefg

81 return "Hello B A C" 2cbdbebfbgbhbib

82 

83 

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

85def get_b_a_c_path_override(): 1abcdefg

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

87 

88 

89router_b_a.include_router( 1abcdefg

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

91) 

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

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

94router_a.include_router( 1abcdefg

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

96) 

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

98app.include_router( 1abcdefg

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

100) 

101 

102 

103client = TestClient(app) 1abcdefg

104 

105json_type = "application/json" 1abcdefg

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

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

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

109 

110 

111def test_app(): 1abcdefg

112 with client: 1hijklmn

113 response = client.get("/") 1hijklmn

114 assert response.json() == {"msg": "Hello World"} 1hijklmn

115 assert response.headers["content-type"] == json_type 1hijklmn

116 

117 

118def test_app_override(): 1abcdefg

119 with client: 1opqrstu

120 response = client.get("/override") 1opqrstu

121 assert response.content == b"Hello World" 1opqrstu

122 assert response.headers["content-type"] == text_type 1opqrstu

123 

124 

125def test_router_a(): 1abcdefg

126 with client: 1vwxyzAB

127 response = client.get("/a") 1vwxyzAB

128 assert response.json() == {"msg": "Hello A"} 1vwxyzAB

129 assert response.headers["content-type"] == json_type 1vwxyzAB

130 

131 

132def test_router_a_override(): 1abcdefg

133 with client: 1CDEFGHI

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

135 assert response.content == b"Hello A" 1CDEFGHI

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

137 

138 

139def test_router_a_a(): 1abcdefg

140 with client: 1JKLMNOP

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

142 assert response.json() == {"msg": "Hello A A"} 1JKLMNOP

143 assert response.headers["content-type"] == json_type 1JKLMNOP

144 

145 

146def test_router_a_a_override(): 1abcdefg

147 with client: 1QRSTUVW

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

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

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

151 

152 

153def test_router_a_b(): 1abcdefg

154 with client: 1XYZ0123

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

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

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

158 

159 

160def test_router_a_b_override(): 1abcdefg

161 with client: 1456789!

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

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

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

165 

166 

167def test_router_b(): 1abcdefg

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

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

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

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

172 

173 

174def test_router_b_override(): 1abcdefg

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

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

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

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

179 

180 

181def test_router_b_a(): 1abcdefg

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

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

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

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

186 

187 

188def test_router_b_a_override(): 1abcdefg

189 with client: 2` { | } ~ abbb

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

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

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

193 

194 

195def test_router_b_a_c(): 1abcdefg

196 with client: 2cbdbebfbgbhbib

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

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

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

200 

201 

202def test_router_b_a_c_override(): 1abcdefg

203 with client: 2jbkblbmbnbobpb

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

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

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