Coverage for tests/test_tutorial/test_body_updates/test_tutorial001_py310.py: 100%

29 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-08-08 03:53 +0000

1import pytest 1deabc

2from fastapi.testclient import TestClient 1deabc

3 

4from ...utils import needs_py310, needs_pydanticv1, needs_pydanticv2 1deabc

5 

6 

7@pytest.fixture(name="client") 1deabc

8def get_client(): 1deabc

9 from docs_src.body_updates.tutorial001_py310 import app 1abc

10 

11 client = TestClient(app) 1abc

12 return client 1abc

13 

14 

15@needs_py310 1deabc

16def test_get(client: TestClient): 1deabc

17 response = client.get("/items/baz") 1abc

18 assert response.status_code == 200, response.text 1abc

19 assert response.json() == { 1abc

20 "name": "Baz", 

21 "description": None, 

22 "price": 50.2, 

23 "tax": 10.5, 

24 "tags": [], 

25 } 

26 

27 

28@needs_py310 1deabc

29def test_put(client: TestClient): 1deabc

30 response = client.put( 1abc

31 "/items/bar", json={"name": "Barz", "price": 3, "description": None} 

32 ) 

33 assert response.json() == { 1abc

34 "name": "Barz", 

35 "description": None, 

36 "price": 3, 

37 "tax": 10.5, 

38 "tags": [], 

39 } 

40 

41 

42@needs_py310 1deabc

43@needs_pydanticv2 1deabc

44def test_openapi_schema(client: TestClient): 1deabc

45 response = client.get("/openapi.json") 1abc

46 assert response.status_code == 200, response.text 1abc

47 assert response.json() == { 1abc

48 "openapi": "3.1.0", 

49 "info": {"title": "FastAPI", "version": "0.1.0"}, 

50 "paths": { 

51 "/items/{item_id}": { 

52 "get": { 

53 "responses": { 

54 "200": { 

55 "description": "Successful Response", 

56 "content": { 

57 "application/json": { 

58 "schema": {"$ref": "#/components/schemas/Item"} 

59 } 

60 }, 

61 }, 

62 "422": { 

63 "description": "Validation Error", 

64 "content": { 

65 "application/json": { 

66 "schema": { 

67 "$ref": "#/components/schemas/HTTPValidationError" 

68 } 

69 } 

70 }, 

71 }, 

72 }, 

73 "summary": "Read Item", 

74 "operationId": "read_item_items__item_id__get", 

75 "parameters": [ 

76 { 

77 "required": True, 

78 "schema": {"title": "Item Id", "type": "string"}, 

79 "name": "item_id", 

80 "in": "path", 

81 } 

82 ], 

83 }, 

84 "put": { 

85 "responses": { 

86 "200": { 

87 "description": "Successful Response", 

88 "content": { 

89 "application/json": { 

90 "schema": {"$ref": "#/components/schemas/Item"} 

91 } 

92 }, 

93 }, 

94 "422": { 

95 "description": "Validation Error", 

96 "content": { 

97 "application/json": { 

98 "schema": { 

99 "$ref": "#/components/schemas/HTTPValidationError" 

100 } 

101 } 

102 }, 

103 }, 

104 }, 

105 "summary": "Update Item", 

106 "operationId": "update_item_items__item_id__put", 

107 "parameters": [ 

108 { 

109 "required": True, 

110 "schema": {"title": "Item Id", "type": "string"}, 

111 "name": "item_id", 

112 "in": "path", 

113 } 

114 ], 

115 "requestBody": { 

116 "content": { 

117 "application/json": { 

118 "schema": {"$ref": "#/components/schemas/Item"} 

119 } 

120 }, 

121 "required": True, 

122 }, 

123 }, 

124 } 

125 }, 

126 "components": { 

127 "schemas": { 

128 "Item": { 

129 "type": "object", 

130 "title": "Item", 

131 "properties": { 

132 "name": { 

133 "anyOf": [{"type": "string"}, {"type": "null"}], 

134 "title": "Name", 

135 }, 

136 "description": { 

137 "anyOf": [{"type": "string"}, {"type": "null"}], 

138 "title": "Description", 

139 }, 

140 "price": { 

141 "anyOf": [{"type": "number"}, {"type": "null"}], 

142 "title": "Price", 

143 }, 

144 "tax": {"title": "Tax", "type": "number", "default": 10.5}, 

145 "tags": { 

146 "title": "Tags", 

147 "type": "array", 

148 "items": {"type": "string"}, 

149 "default": [], 

150 }, 

151 }, 

152 }, 

153 "ValidationError": { 

154 "title": "ValidationError", 

155 "required": ["loc", "msg", "type"], 

156 "type": "object", 

157 "properties": { 

158 "loc": { 

159 "title": "Location", 

160 "type": "array", 

161 "items": { 

162 "anyOf": [{"type": "string"}, {"type": "integer"}] 

163 }, 

164 }, 

165 "msg": {"title": "Message", "type": "string"}, 

166 "type": {"title": "Error Type", "type": "string"}, 

167 }, 

168 }, 

169 "HTTPValidationError": { 

170 "title": "HTTPValidationError", 

171 "type": "object", 

172 "properties": { 

173 "detail": { 

174 "title": "Detail", 

175 "type": "array", 

176 "items": {"$ref": "#/components/schemas/ValidationError"}, 

177 } 

178 }, 

179 }, 

180 } 

181 }, 

182 } 

183 

184 

185# TODO: remove when deprecating Pydantic v1 

186@needs_py310 1deabc

187@needs_pydanticv1 1deabc

188def test_openapi_schema_pv1(client: TestClient): 1deabc

189 response = client.get("/openapi.json") 1abc

190 assert response.status_code == 200, response.text 1abc

191 assert response.json() == { 1abc

192 "openapi": "3.1.0", 

193 "info": {"title": "FastAPI", "version": "0.1.0"}, 

194 "paths": { 

195 "/items/{item_id}": { 

196 "get": { 

197 "responses": { 

198 "200": { 

199 "description": "Successful Response", 

200 "content": { 

201 "application/json": { 

202 "schema": {"$ref": "#/components/schemas/Item"} 

203 } 

204 }, 

205 }, 

206 "422": { 

207 "description": "Validation Error", 

208 "content": { 

209 "application/json": { 

210 "schema": { 

211 "$ref": "#/components/schemas/HTTPValidationError" 

212 } 

213 } 

214 }, 

215 }, 

216 }, 

217 "summary": "Read Item", 

218 "operationId": "read_item_items__item_id__get", 

219 "parameters": [ 

220 { 

221 "required": True, 

222 "schema": {"title": "Item Id", "type": "string"}, 

223 "name": "item_id", 

224 "in": "path", 

225 } 

226 ], 

227 }, 

228 "put": { 

229 "responses": { 

230 "200": { 

231 "description": "Successful Response", 

232 "content": { 

233 "application/json": { 

234 "schema": {"$ref": "#/components/schemas/Item"} 

235 } 

236 }, 

237 }, 

238 "422": { 

239 "description": "Validation Error", 

240 "content": { 

241 "application/json": { 

242 "schema": { 

243 "$ref": "#/components/schemas/HTTPValidationError" 

244 } 

245 } 

246 }, 

247 }, 

248 }, 

249 "summary": "Update Item", 

250 "operationId": "update_item_items__item_id__put", 

251 "parameters": [ 

252 { 

253 "required": True, 

254 "schema": {"title": "Item Id", "type": "string"}, 

255 "name": "item_id", 

256 "in": "path", 

257 } 

258 ], 

259 "requestBody": { 

260 "content": { 

261 "application/json": { 

262 "schema": {"$ref": "#/components/schemas/Item"} 

263 } 

264 }, 

265 "required": True, 

266 }, 

267 }, 

268 } 

269 }, 

270 "components": { 

271 "schemas": { 

272 "Item": { 

273 "title": "Item", 

274 "type": "object", 

275 "properties": { 

276 "name": {"title": "Name", "type": "string"}, 

277 "description": {"title": "Description", "type": "string"}, 

278 "price": {"title": "Price", "type": "number"}, 

279 "tax": {"title": "Tax", "type": "number", "default": 10.5}, 

280 "tags": { 

281 "title": "Tags", 

282 "type": "array", 

283 "items": {"type": "string"}, 

284 "default": [], 

285 }, 

286 }, 

287 }, 

288 "ValidationError": { 

289 "title": "ValidationError", 

290 "required": ["loc", "msg", "type"], 

291 "type": "object", 

292 "properties": { 

293 "loc": { 

294 "title": "Location", 

295 "type": "array", 

296 "items": { 

297 "anyOf": [{"type": "string"}, {"type": "integer"}] 

298 }, 

299 }, 

300 "msg": {"title": "Message", "type": "string"}, 

301 "type": {"title": "Error Type", "type": "string"}, 

302 }, 

303 }, 

304 "HTTPValidationError": { 

305 "title": "HTTPValidationError", 

306 "type": "object", 

307 "properties": { 

308 "detail": { 

309 "title": "Detail", 

310 "type": "array", 

311 "items": {"$ref": "#/components/schemas/ValidationError"}, 

312 } 

313 }, 

314 }, 

315 } 

316 }, 

317 }