Coverage for tests / test_validate_response_dataclass.py: 100%
30 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-21 17:29 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-21 17:29 +0000
1import pytest 1abcd
2from fastapi import FastAPI 1abcd
3from fastapi.exceptions import ResponseValidationError 1abcd
4from fastapi.testclient import TestClient 1abcd
5from pydantic.dataclasses import dataclass 1abcd
7app = FastAPI() 1abcd
10@dataclass 1abcd
11class Item: 1abcd
12 name: str 1abcd
13 price: float | None = None 1abcd
14 owner_ids: list[int] | None = None 1abcd
17@app.get("/items/invalid", response_model=Item) 1abcd
18def get_invalid(): 1abcd
19 return {"name": "invalid", "price": "foo"} 1efg
22@app.get("/items/innerinvalid", response_model=Item) 1abcd
23def get_innerinvalid(): 1abcd
24 return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]} 1hij
27@app.get("/items/invalidlist", response_model=list[Item]) 1abcd
28def get_invalidlist(): 1abcd
29 return [ 1klm
30 {"name": "foo"},
31 {"name": "bar", "price": "bar"},
32 {"name": "baz", "price": "baz"},
33 ]
36client = TestClient(app) 1abcd
39def test_invalid(): 1abcd
40 with pytest.raises(ResponseValidationError): 1efg
41 client.get("/items/invalid") 1efg
44def test_double_invalid(): 1abcd
45 with pytest.raises(ResponseValidationError): 1hij
46 client.get("/items/innerinvalid") 1hij
49def test_invalid_list(): 1abcd
50 with pytest.raises(ResponseValidationError): 1klm
51 client.get("/items/invalidlist") 1klm