Coverage for tests/test_validate_response_dataclass.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
3import pytest 1abcdefg
4from fastapi import FastAPI 1abcdefg
5from fastapi.exceptions import ResponseValidationError 1abcdefg
6from fastapi.testclient import TestClient 1abcdefg
7from pydantic.dataclasses import dataclass 1abcdefg
9app = FastAPI() 1abcdefg
12@dataclass 1abcdefg
13class Item: 1abcdefg
14 name: str 1abcdefg
15 price: Optional[float] = None 1abcdefg
16 owner_ids: Optional[List[int]] = None 1abcdefg
19@app.get("/items/invalid", response_model=Item) 1abcdefg
20def get_invalid(): 1abcdefg
21 return {"name": "invalid", "price": "foo"} 1hijklmn
24@app.get("/items/innerinvalid", response_model=Item) 1abcdefg
25def get_innerinvalid(): 1abcdefg
26 return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]} 1opqrstu
29@app.get("/items/invalidlist", response_model=List[Item]) 1abcdefg
30def get_invalidlist(): 1abcdefg
31 return [ 1vwxyzAB
32 {"name": "foo"},
33 {"name": "bar", "price": "bar"},
34 {"name": "baz", "price": "baz"},
35 ]
38client = TestClient(app) 1abcdefg
41def test_invalid(): 1abcdefg
42 with pytest.raises(ResponseValidationError): 1hijklmn
43 client.get("/items/invalid") 1hijklmn
46def test_double_invalid(): 1abcdefg
47 with pytest.raises(ResponseValidationError): 1opqrstu
48 client.get("/items/innerinvalid") 1opqrstu
51def test_invalid_list(): 1abcdefg
52 with pytest.raises(ResponseValidationError): 1vwxyzAB
53 client.get("/items/invalidlist") 1vwxyzAB