Issue Manager / issue-manager (push) Has been cancelled
Build Docs / changes (push) Has been cancelled
Build Docs / langs (push) Has been cancelled
Build Docs / build-docs (push) Has been cancelled
Build Docs / docs-all-green (push) Has been cancelled
Conflict detector / main (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi) (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi-slim) (push) Has been cancelled
Test Redistribute / test-redistribute-alls-green (push) Has been cancelled
Test / lint (push) Has been cancelled
Test / test (pydantic-v1, 3.10) (push) Has been cancelled
Test / test (pydantic-v1, 3.11) (push) Has been cancelled
Test / test (pydantic-v1, 3.13) (push) Has been cancelled
Test / test (pydantic-v1, 3.8) (push) Has been cancelled
Test / test (pydantic-v1, 3.9) (push) Has been cancelled
Test / test (pydantic-v2, 3.10) (push) Has been cancelled
Test / test (pydantic-v2, 3.11) (push) Has been cancelled
Test / test (pydantic-v2, 3.12) (push) Has been cancelled
Test / test (pydantic-v2, 3.13) (push) Has been cancelled
Test / test (pydantic-v2, 3.14) (push) Has been cancelled
Test / test (pydantic-v2, 3.8) (push) Has been cancelled
Test / test (pydantic-v2, 3.9) (push) Has been cancelled
Test / coverage-combine (push) Has been cancelled
Test / check (push) Has been cancelled
Label Approved / label-approved (push) Has been cancelled
FastAPI People Contributors / job (push) Has been cancelled
FastAPI People Sponsors / job (push) Has been cancelled
Update Topic Repos / topic-repos (push) Has been cancelled
FastAPI People / job (push) Has been cancelled
Test / test (pydantic-v1, 3.12) (push) Has been cancelled
93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
import pytest
|
|
from fastapi import FastAPI
|
|
from fastapi.testclient import TestClient
|
|
from inline_snapshot import snapshot
|
|
from pydantic import BaseModel
|
|
|
|
from tests.utils import needs_py310, needs_pydanticv2
|
|
|
|
|
|
@pytest.fixture(name="client")
|
|
def get_client():
|
|
from enum import Enum
|
|
|
|
app = FastAPI()
|
|
|
|
class PlatformRole(str, Enum):
|
|
admin = "admin"
|
|
user = "user"
|
|
|
|
class OtherRole(str, Enum): ...
|
|
|
|
class User(BaseModel):
|
|
username: str
|
|
role: PlatformRole | OtherRole
|
|
|
|
@app.get("/users")
|
|
async def get_user() -> User:
|
|
return {"username": "alice", "role": "admin"}
|
|
|
|
client = TestClient(app)
|
|
return client
|
|
|
|
|
|
@needs_py310
|
|
@needs_pydanticv2
|
|
def test_get(client: TestClient):
|
|
response = client.get("/users")
|
|
assert response.json() == {"username": "alice", "role": "admin"}
|
|
|
|
|
|
@needs_py310
|
|
@needs_pydanticv2
|
|
def test_openapi_schema(client: TestClient):
|
|
response = client.get("openapi.json")
|
|
assert response.json() == snapshot(
|
|
{
|
|
"openapi": "3.1.0",
|
|
"info": {"title": "FastAPI", "version": "0.1.0"},
|
|
"paths": {
|
|
"/users": {
|
|
"get": {
|
|
"summary": "Get User",
|
|
"operationId": "get_user_users_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {"$ref": "#/components/schemas/User"}
|
|
}
|
|
},
|
|
}
|
|
},
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"PlatformRole": {
|
|
"type": "string",
|
|
"enum": ["admin", "user"],
|
|
"title": "PlatformRole",
|
|
},
|
|
"User": {
|
|
"properties": {
|
|
"username": {"type": "string", "title": "Username"},
|
|
"role": {
|
|
"anyOf": [
|
|
{"$ref": "#/components/schemas/PlatformRole"},
|
|
{"enum": [], "title": "OtherRole"},
|
|
],
|
|
"title": "Role",
|
|
},
|
|
},
|
|
"type": "object",
|
|
"required": ["username", "role"],
|
|
"title": "User",
|
|
},
|
|
}
|
|
},
|
|
}
|
|
)
|