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