Coverage for tests / test_serialize_response.py: 100%

30 statements  

« prev     ^ index     » next       coverage.py v7.13.3, created at 2026-04-06 01:24 +0000

1from fastapi import FastAPI 1adbc

2from fastapi.testclient import TestClient 1adbc

3from pydantic import BaseModel 1adbc

4 

5app = FastAPI() 1adbc

6 

7 

8class Item(BaseModel): 1adbc

9 name: str 1abc

10 price: float | None = None 1adbc

11 owner_ids: list[int] | None = None 1adbc

12 

13 

14@app.get("/items/valid", response_model=Item) 1adbc

15def get_valid(): 1adbc

16 return {"name": "valid", "price": 1.0} 1efgh

17 

18 

19@app.get("/items/coerce", response_model=Item) 1adbc

20def get_coerce(): 1adbc

21 return {"name": "coerce", "price": "1.0"} 1ijkl

22 

23 

24@app.get("/items/validlist", response_model=list[Item]) 1adbc

25def get_validlist(): 1adbc

26 return [ 1mnop

27 {"name": "foo"}, 

28 {"name": "bar", "price": 1.0}, 

29 {"name": "baz", "price": 2.0, "owner_ids": [1, 2, 3]}, 

30 ] 

31 

32 

33client = TestClient(app) 1adbc

34 

35 

36def test_valid(): 1adbc

37 response = client.get("/items/valid") 1efgh

38 response.raise_for_status() 1efgh

39 assert response.json() == {"name": "valid", "price": 1.0, "owner_ids": None} 1efgh

40 

41 

42def test_coerce(): 1adbc

43 response = client.get("/items/coerce") 1ijkl

44 response.raise_for_status() 1ijkl

45 assert response.json() == {"name": "coerce", "price": 1.0, "owner_ids": None} 1ijkl

46 

47 

48def test_validlist(): 1adbc

49 response = client.get("/items/validlist") 1mnop

50 response.raise_for_status() 1mnop

51 assert response.json() == [ 1mnop

52 {"name": "foo", "price": None, "owner_ids": None}, 

53 {"name": "bar", "price": 1.0, "owner_ids": None}, 

54 {"name": "baz", "price": 2.0, "owner_ids": [1, 2, 3]}, 

55 ]