Coverage for tests / test_skip_defaults.py: 100%
49 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
1from fastapi import FastAPI 1adbc
2from fastapi.testclient import TestClient 1adbc
3from pydantic import BaseModel 1adbc
5app = FastAPI() 1adbc
8class SubModel(BaseModel): 1adbc
9 a: str | None = "foo" 1adbc
12class Model(BaseModel): 1adbc
13 x: int | None = None 1adbc
14 sub: SubModel 1abc
17class ModelSubclass(Model): 1adbc
18 y: int 1abc
19 z: int = 0 1adbc
20 w: int | None = None 1adbc
23class ModelDefaults(BaseModel): 1adbc
24 w: str | None = None 1adbc
25 x: str | None = None 1adbc
26 y: str = "y" 1adbc
27 z: str = "z" 1adbc
30@app.get("/", response_model=Model, response_model_exclude_unset=True) 1adbc
31def get_root() -> ModelSubclass: 1adbc
32 return ModelSubclass(sub={}, y=1, z=0) 1efgh
35@app.get( 1adbc
36 "/exclude_unset", response_model=ModelDefaults, response_model_exclude_unset=True
37)
38def get_exclude_unset() -> ModelDefaults: 1adbc
39 return ModelDefaults(x=None, y="y") 1ijkl
42@app.get( 1adbc
43 "/exclude_defaults",
44 response_model=ModelDefaults,
45 response_model_exclude_defaults=True,
46)
47def get_exclude_defaults() -> ModelDefaults: 1adbc
48 return ModelDefaults(x=None, y="y") 1mnop
51@app.get( 1adbc
52 "/exclude_none", response_model=ModelDefaults, response_model_exclude_none=True
53)
54def get_exclude_none() -> ModelDefaults: 1adbc
55 return ModelDefaults(x=None, y="y") 1qrst
58@app.get( 1adbc
59 "/exclude_unset_none",
60 response_model=ModelDefaults,
61 response_model_exclude_unset=True,
62 response_model_exclude_none=True,
63)
64def get_exclude_unset_none() -> ModelDefaults: 1adbc
65 return ModelDefaults(x=None, y="y") 1uvwx
68client = TestClient(app) 1adbc
71def test_return_defaults(): 1adbc
72 response = client.get("/") 1efgh
73 assert response.json() == {"sub": {}} 1efgh
76def test_return_exclude_unset(): 1adbc
77 response = client.get("/exclude_unset") 1ijkl
78 assert response.json() == {"x": None, "y": "y"} 1ijkl
81def test_return_exclude_defaults(): 1adbc
82 response = client.get("/exclude_defaults") 1mnop
83 assert response.json() == {} 1mnop
86def test_return_exclude_none(): 1adbc
87 response = client.get("/exclude_none") 1qrst
88 assert response.json() == {"y": "y", "z": "z"} 1qrst
91def test_return_exclude_unset_none(): 1adbc
92 response = client.get("/exclude_unset_none") 1uvwx
93 assert response.json() == {"y": "y"} 1uvwx