Coverage for tests / test_validate_response.py: 100%
50 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
1import pytest 1adbc
2from fastapi import FastAPI 1adbc
3from fastapi.exceptions import ResponseValidationError 1adbc
4from fastapi.testclient import TestClient 1adbc
5from pydantic import BaseModel 1adbc
7app = FastAPI() 1adbc
10class Item(BaseModel): 1adbc
11 name: str 1abc
12 price: float | None = None 1adbc
13 owner_ids: list[int] | None = None 1adbc
16@app.get("/items/invalid", response_model=Item) 1adbc
17def get_invalid(): 1adbc
18 return {"name": "invalid", "price": "foo"} 1mnop
21@app.get("/items/invalidnone", response_model=Item) 1adbc
22def get_invalid_none(): 1adbc
23 return None 1qrst
26@app.get("/items/validnone", response_model=Item | None) 1adbc
27def get_valid_none(send_none: bool = False): 1adbc
28 if send_none: 1efghijk
29 return None 1flik
30 else:
31 return {"name": "invalid", "price": 3.2} 1eghj
34@app.get("/items/innerinvalid", response_model=Item) 1adbc
35def get_innerinvalid(): 1adbc
36 return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]} 1uvwx
39@app.get("/items/invalidlist", response_model=list[Item]) 1adbc
40def get_invalidlist(): 1adbc
41 return [ 1yzAB
42 {"name": "foo"},
43 {"name": "bar", "price": "bar"},
44 {"name": "baz", "price": "baz"},
45 ]
48client = TestClient(app) 1adbc
51def test_invalid(): 1adbc
52 with pytest.raises(ResponseValidationError): 1mnop
53 client.get("/items/invalid") 1mnop
56def test_invalid_none(): 1adbc
57 with pytest.raises(ResponseValidationError): 1qrst
58 client.get("/items/invalidnone") 1qrst
61def test_valid_none_data(): 1adbc
62 response = client.get("/items/validnone") 1eghj
63 data = response.json() 1eghj
64 assert response.status_code == 200 1eghj
65 assert data == {"name": "invalid", "price": 3.2, "owner_ids": None} 1eghj
68def test_valid_none_none(): 1adbc
69 response = client.get("/items/validnone", params={"send_none": "true"}) 1flik
70 data = response.json() 1flik
71 assert response.status_code == 200 1flik
72 assert data is None 1flik
75def test_double_invalid(): 1adbc
76 with pytest.raises(ResponseValidationError): 1uvwx
77 client.get("/items/innerinvalid") 1uvwx
80def test_invalid_list(): 1adbc
81 with pytest.raises(ResponseValidationError): 1yzAB
82 client.get("/items/invalidlist") 1yzAB