Coverage for tests/test_serialize_response.py: 100%

31 statements  

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

1from typing import List, Optional 1abcdefg

2 

3from fastapi import FastAPI 1abcdefg

4from fastapi.testclient import TestClient 1abcdefg

5from pydantic import BaseModel 1abcdefg

6 

7app = FastAPI() 1abcdefg

8 

9 

10class Item(BaseModel): 1abcdefg

11 name: str 1abcdefg

12 price: Optional[float] = None 1abcdefg

13 owner_ids: Optional[List[int]] = None 1abcdefg

14 

15 

16@app.get("/items/valid", response_model=Item) 1abcdefg

17def get_valid(): 1abcdefg

18 return {"name": "valid", "price": 1.0} 1hijklmn

19 

20 

21@app.get("/items/coerce", response_model=Item) 1abcdefg

22def get_coerce(): 1abcdefg

23 return {"name": "coerce", "price": "1.0"} 1opqrstu

24 

25 

26@app.get("/items/validlist", response_model=List[Item]) 1abcdefg

27def get_validlist(): 1abcdefg

28 return [ 1vwxyzAB

29 {"name": "foo"}, 

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

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

32 ] 

33 

34 

35client = TestClient(app) 1abcdefg

36 

37 

38def test_valid(): 1abcdefg

39 response = client.get("/items/valid") 1hijklmn

40 response.raise_for_status() 1hijklmn

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

42 

43 

44def test_coerce(): 1abcdefg

45 response = client.get("/items/coerce") 1opqrstu

46 response.raise_for_status() 1opqrstu

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

48 

49 

50def test_validlist(): 1abcdefg

51 response = client.get("/items/validlist") 1vwxyzAB

52 response.raise_for_status() 1vwxyzAB

53 assert response.json() == [ 1vwxyzAB

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

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

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

57 ]