Coverage for tests / test_serialize_response_dataclass.py: 100%
61 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 dataclasses import dataclass 1adbc
2from datetime import datetime 1adbc
4from fastapi import FastAPI 1adbc
5from fastapi.testclient import TestClient 1adbc
7app = FastAPI() 1adbc
10@dataclass 1adbc
11class Item: 1adbc
12 name: str 1abc
13 date: datetime 1abc
14 price: float | None = None 1adbc
15 owner_ids: list[int] | None = None 1adbc
18@app.get("/items/valid", response_model=Item) 1adbc
19def get_valid(): 1adbc
20 return {"name": "valid", "date": datetime(2021, 7, 26), "price": 1.0} 1efgh
23@app.get("/items/object", response_model=Item) 1adbc
24def get_object(): 1adbc
25 return Item( 1ijkl
26 name="object", date=datetime(2021, 7, 26), price=1.0, owner_ids=[1, 2, 3]
27 )
30@app.get("/items/coerce", response_model=Item) 1adbc
31def get_coerce(): 1adbc
32 return {"name": "coerce", "date": datetime(2021, 7, 26).isoformat(), "price": "1.0"} 1mnop
35@app.get("/items/validlist", response_model=list[Item]) 1adbc
36def get_validlist(): 1adbc
37 return [ 1qrst
38 {"name": "foo", "date": datetime(2021, 7, 26)},
39 {"name": "bar", "date": datetime(2021, 7, 26), "price": 1.0},
40 {
41 "name": "baz",
42 "date": datetime(2021, 7, 26),
43 "price": 2.0,
44 "owner_ids": [1, 2, 3],
45 },
46 ]
49@app.get("/items/objectlist", response_model=list[Item]) 1adbc
50def get_objectlist(): 1adbc
51 return [ 1uvwx
52 Item(name="foo", date=datetime(2021, 7, 26)),
53 Item(name="bar", date=datetime(2021, 7, 26), price=1.0),
54 Item(name="baz", date=datetime(2021, 7, 26), price=2.0, owner_ids=[1, 2, 3]),
55 ]
58@app.get("/items/no-response-model/object") 1adbc
59def get_no_response_model_object(): 1adbc
60 return Item( 1yzAB
61 name="object", date=datetime(2021, 7, 26), price=1.0, owner_ids=[1, 2, 3]
62 )
65@app.get("/items/no-response-model/objectlist") 1adbc
66def get_no_response_model_objectlist(): 1adbc
67 return [ 1CDEF
68 Item(name="foo", date=datetime(2021, 7, 26)),
69 Item(name="bar", date=datetime(2021, 7, 26), price=1.0),
70 Item(name="baz", date=datetime(2021, 7, 26), price=2.0, owner_ids=[1, 2, 3]),
71 ]
74client = TestClient(app) 1adbc
77def test_valid(): 1adbc
78 response = client.get("/items/valid") 1efgh
79 response.raise_for_status() 1efgh
80 assert response.json() == { 1efgh
81 "name": "valid",
82 "date": datetime(2021, 7, 26).isoformat(),
83 "price": 1.0,
84 "owner_ids": None,
85 }
88def test_object(): 1adbc
89 response = client.get("/items/object") 1ijkl
90 response.raise_for_status() 1ijkl
91 assert response.json() == { 1ijkl
92 "name": "object",
93 "date": datetime(2021, 7, 26).isoformat(),
94 "price": 1.0,
95 "owner_ids": [1, 2, 3],
96 }
99def test_coerce(): 1adbc
100 response = client.get("/items/coerce") 1mnop
101 response.raise_for_status() 1mnop
102 assert response.json() == { 1mnop
103 "name": "coerce",
104 "date": datetime(2021, 7, 26).isoformat(),
105 "price": 1.0,
106 "owner_ids": None,
107 }
110def test_validlist(): 1adbc
111 response = client.get("/items/validlist") 1qrst
112 response.raise_for_status() 1qrst
113 assert response.json() == [ 1qrst
114 {
115 "name": "foo",
116 "date": datetime(2021, 7, 26).isoformat(),
117 "price": None,
118 "owner_ids": None,
119 },
120 {
121 "name": "bar",
122 "date": datetime(2021, 7, 26).isoformat(),
123 "price": 1.0,
124 "owner_ids": None,
125 },
126 {
127 "name": "baz",
128 "date": datetime(2021, 7, 26).isoformat(),
129 "price": 2.0,
130 "owner_ids": [1, 2, 3],
131 },
132 ]
135def test_objectlist(): 1adbc
136 response = client.get("/items/objectlist") 1uvwx
137 response.raise_for_status() 1uvwx
138 assert response.json() == [ 1uvwx
139 {
140 "name": "foo",
141 "date": datetime(2021, 7, 26).isoformat(),
142 "price": None,
143 "owner_ids": None,
144 },
145 {
146 "name": "bar",
147 "date": datetime(2021, 7, 26).isoformat(),
148 "price": 1.0,
149 "owner_ids": None,
150 },
151 {
152 "name": "baz",
153 "date": datetime(2021, 7, 26).isoformat(),
154 "price": 2.0,
155 "owner_ids": [1, 2, 3],
156 },
157 ]
160def test_no_response_model_object(): 1adbc
161 response = client.get("/items/no-response-model/object") 1yzAB
162 response.raise_for_status() 1yzAB
163 assert response.json() == { 1yzAB
164 "name": "object",
165 "date": datetime(2021, 7, 26).isoformat(),
166 "price": 1.0,
167 "owner_ids": [1, 2, 3],
168 }
171def test_no_response_model_objectlist(): 1adbc
172 response = client.get("/items/no-response-model/objectlist") 1CDEF
173 response.raise_for_status() 1CDEF
174 assert response.json() == [ 1CDEF
175 {
176 "name": "foo",
177 "date": datetime(2021, 7, 26).isoformat(),
178 "price": None,
179 "owner_ids": None,
180 },
181 {
182 "name": "bar",
183 "date": datetime(2021, 7, 26).isoformat(),
184 "price": 1.0,
185 "owner_ids": None,
186 },
187 {
188 "name": "baz",
189 "date": datetime(2021, 7, 26).isoformat(),
190 "price": 2.0,
191 "owner_ids": [1, 2, 3],
192 },
193 ]