Coverage for tests / test_validate_response_dataclass.py: 100%

30 statements  

« 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.dataclasses import dataclass 1adbc

6 

7app = FastAPI() 1adbc

8 

9 

10@dataclass 1adbc

11class Item: 1adbc

12 name: str 1abc

13 price: float | None = None 1adbc

14 owner_ids: list[int] | None = None 1adbc

15 

16 

17@app.get("/items/invalid", response_model=Item) 1adbc

18def get_invalid(): 1adbc

19 return {"name": "invalid", "price": "foo"} 1efgh

20 

21 

22@app.get("/items/innerinvalid", response_model=Item) 1adbc

23def get_innerinvalid(): 1adbc

24 return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]} 1ijkl

25 

26 

27@app.get("/items/invalidlist", response_model=list[Item]) 1adbc

28def get_invalidlist(): 1adbc

29 return [ 1mnop

30 {"name": "foo"}, 

31 {"name": "bar", "price": "bar"}, 

32 {"name": "baz", "price": "baz"}, 

33 ] 

34 

35 

36client = TestClient(app) 1adbc

37 

38 

39def test_invalid(): 1adbc

40 with pytest.raises(ResponseValidationError): 1efgh

41 client.get("/items/invalid") 1efgh

42 

43 

44def test_double_invalid(): 1adbc

45 with pytest.raises(ResponseValidationError): 1ijkl

46 client.get("/items/innerinvalid") 1ijkl

47 

48 

49def test_invalid_list(): 1adbc

50 with pytest.raises(ResponseValidationError): 1mnop

51 client.get("/items/invalidlist") 1mnop