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
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
1from typing import List, Optional 1abcdefg
3from fastapi import FastAPI 1abcdefg
4from fastapi.testclient import TestClient 1abcdefg
5from pydantic import BaseModel 1abcdefg
7app = FastAPI() 1abcdefg
10class Item(BaseModel): 1abcdefg
11 name: str 1abcdefg
12 price: Optional[float] = None 1abcdefg
13 owner_ids: Optional[List[int]] = None 1abcdefg
16@app.get("/items/valid", response_model=Item) 1abcdefg
17def get_valid(): 1abcdefg
18 return {"name": "valid", "price": 1.0} 1hijklmn
21@app.get("/items/coerce", response_model=Item) 1abcdefg
22def get_coerce(): 1abcdefg
23 return {"name": "coerce", "price": "1.0"} 1opqrstu
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 ]
35client = TestClient(app) 1abcdefg
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
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
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 ]