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

1from typing import Optional 1abcdefg

2 

3from fastapi import FastAPI, File, Form 1abcdefg

4from starlette.testclient import TestClient 1abcdefg

5from typing_extensions import Annotated 1abcdefg

6 

7app = FastAPI() 1abcdefg

8 

9 

10@app.post("/urlencoded") 1abcdefg

11async def post_url_encoded(age: Annotated[Optional[int], Form()] = None): 1abcdefg

12 return age 1hijklmn

13 

14 

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

21 

22 

23client = TestClient(app) 1abcdefg

24 

25 

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

30 

31 

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