Coverage for tests/test_skip_defaults.py: 100%
50 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 Optional 1abcdef
3from fastapi import FastAPI 1abcdef
4from fastapi.testclient import TestClient 1abcdef
5from pydantic import BaseModel 1abcdef
7app = FastAPI() 1abcdef
10class SubModel(BaseModel): 1abcdef
11 a: Optional[str] = "foo" 1abcdef
14class Model(BaseModel): 1abcdef
15 x: Optional[int] = None 1abcdef
16 sub: SubModel 1abcdef
19class ModelSubclass(Model): 1abcdef
20 y: int 1abcdef
21 z: int = 0 1abcdef
22 w: Optional[int] = None 1abcdef
25class ModelDefaults(BaseModel): 1abcdef
26 w: Optional[str] = None 1abcdef
27 x: Optional[str] = None 1abcdef
28 y: str = "y" 1abcdef
29 z: str = "z" 1abcdef
32@app.get("/", response_model=Model, response_model_exclude_unset=True) 1abcdef
33def get_root() -> ModelSubclass: 1abcdef
34 return ModelSubclass(sub={}, y=1, z=0) 1ghijkl
37@app.get( 1abcdef
38 "/exclude_unset", response_model=ModelDefaults, response_model_exclude_unset=True
39)
40def get_exclude_unset() -> ModelDefaults: 1abcdef
41 return ModelDefaults(x=None, y="y") 1mnopqr
44@app.get( 1abcdef
45 "/exclude_defaults",
46 response_model=ModelDefaults,
47 response_model_exclude_defaults=True,
48)
49def get_exclude_defaults() -> ModelDefaults: 1abcdef
50 return ModelDefaults(x=None, y="y") 1stuvwx
53@app.get( 1abcdef
54 "/exclude_none", response_model=ModelDefaults, response_model_exclude_none=True
55)
56def get_exclude_none() -> ModelDefaults: 1abcdef
57 return ModelDefaults(x=None, y="y") 1yzABCD
60@app.get( 1abcdef
61 "/exclude_unset_none",
62 response_model=ModelDefaults,
63 response_model_exclude_unset=True,
64 response_model_exclude_none=True,
65)
66def get_exclude_unset_none() -> ModelDefaults: 1abcdef
67 return ModelDefaults(x=None, y="y") 1EFGHIJ
70client = TestClient(app) 1abcdef
73def test_return_defaults(): 1abcdef
74 response = client.get("/") 1ghijkl
75 assert response.json() == {"sub": {}} 1ghijkl
78def test_return_exclude_unset(): 1abcdef
79 response = client.get("/exclude_unset") 1mnopqr
80 assert response.json() == {"x": None, "y": "y"} 1mnopqr
83def test_return_exclude_defaults(): 1abcdef
84 response = client.get("/exclude_defaults") 1stuvwx
85 assert response.json() == {} 1stuvwx
88def test_return_exclude_none(): 1abcdef
89 response = client.get("/exclude_none") 1yzABCD
90 assert response.json() == {"y": "y", "z": "z"} 1yzABCD
93def test_return_exclude_unset_none(): 1abcdef
94 response = client.get("/exclude_unset_none") 1EFGHIJ
95 assert response.json() == {"y": "y"} 1EFGHIJ