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

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

6 

7app = FastAPI() 1abcd

8 

9 

10@dataclass 1abcd

11class Item: 1abcd

12 name: str 1abcd

13 price: float | None = None 1abcd

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

15 

16 

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

18def get_invalid(): 1abcd

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

20 

21 

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

25 

26 

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 ] 

34 

35 

36client = TestClient(app) 1abcd

37 

38 

39def test_invalid(): 1abcd

40 with pytest.raises(ResponseValidationError): 1efg

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

42 

43 

44def test_double_invalid(): 1abcd

45 with pytest.raises(ResponseValidationError): 1hij

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

47 

48 

49def test_invalid_list(): 1abcd

50 with pytest.raises(ResponseValidationError): 1klm

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