Coverage for tests/test_form_default.py: 100%
20 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
1from typing import Optional 1abcdefg
3from fastapi import FastAPI, File, Form 1abcdefg
4from starlette.testclient import TestClient 1abcdefg
5from typing_extensions import Annotated 1abcdefg
7app = FastAPI() 1abcdefg
10@app.post("/urlencoded") 1abcdefg
11async def post_url_encoded(age: Annotated[Optional[int], Form()] = None): 1abcdefg
12 return age 1hijklmn
15@app.post("/multipart") 1abcdefg
16async def post_multi_part( 1abcdefg
17 age: Annotated[Optional[int], Form()] = None,
18 file: Annotated[Optional[bytes], File()] = None,
19):
20 return {"file": file, "age": age} 1opqrstu
23client = TestClient(app) 1abcdefg
26def test_form_default_url_encoded(): 1abcdefg
27 response = client.post("/urlencoded", data={"age": ""}) 1hijklmn
28 assert response.status_code == 200 1hijklmn
29 assert response.text == "null" 1hijklmn
32def test_form_default_multi_part(): 1abcdefg
33 response = client.post("/multipart", data={"age": ""}) 1opqrstu
34 assert response.status_code == 200 1opqrstu
35 assert response.json() == {"file": None, "age": None} 1opqrstu