Coverage for tests / test_validate_response_dataclass.py: 100%
31 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
1from typing import Optional 1abcd
3import pytest 1abcd
4from fastapi import FastAPI 1abcd
5from fastapi.exceptions import ResponseValidationError 1abcd
6from fastapi.testclient import TestClient 1abcd
7from pydantic.dataclasses import dataclass 1abcd
9app = FastAPI() 1abcd
12@dataclass 1abcd
13class Item: 1abcd
14 name: str 1abcd
15 price: Optional[float] = None 1abcd
16 owner_ids: Optional[list[int]] = None 1abcd
19@app.get("/items/invalid", response_model=Item) 1abcd
20def get_invalid(): 1abcd
21 return {"name": "invalid", "price": "foo"} 1efg
24@app.get("/items/innerinvalid", response_model=Item) 1abcd
25def get_innerinvalid(): 1abcd
26 return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]} 1hij
29@app.get("/items/invalidlist", response_model=list[Item]) 1abcd
30def get_invalidlist(): 1abcd
31 return [ 1klm
32 {"name": "foo"},
33 {"name": "bar", "price": "bar"},
34 {"name": "baz", "price": "baz"},
35 ]
38client = TestClient(app) 1abcd
41def test_invalid(): 1abcd
42 with pytest.raises(ResponseValidationError): 1efg
43 client.get("/items/invalid") 1efg
46def test_double_invalid(): 1abcd
47 with pytest.raises(ResponseValidationError): 1hij
48 client.get("/items/innerinvalid") 1hij
51def test_invalid_list(): 1abcd
52 with pytest.raises(ResponseValidationError): 1klm
53 client.get("/items/invalidlist") 1klm