--- /dev/null
+from __future__ import annotations
+
+import uuid
+from dataclasses import dataclass, field
+from typing import List, Union
+
+from dirty_equals import IsUUID
+from fastapi import FastAPI
+from fastapi.testclient import TestClient
+from inline_snapshot import snapshot
+
+
+@dataclass
+class Item:
+ id: uuid.UUID
+ name: str
+ price: float
+ tags: List[str] = field(default_factory=list)
+ description: Union[str, None] = None
+ tax: Union[float, None] = None
+
+
+app = FastAPI()
+
+
+@app.get("/item", response_model=Item)
+async def read_item():
+ return {
+ "id": uuid.uuid4(),
+ "name": "Island In The Moon",
+ "price": 12.99,
+ "description": "A place to be be playin' and havin' fun",
+ "tags": ["breater"],
+ }
+
+
+client = TestClient(app)
+
+
+def test_annotations():
+ response = client.get("/item")
+ assert response.status_code == 200, response.text
+ assert response.json() == snapshot(
+ {
+ "id": IsUUID(),
+ "name": "Island In The Moon",
+ "price": 12.99,
+ "tags": ["breater"],
+ "description": "A place to be be playin' and havin' fun",
+ "tax": None,
+ }
+ )