Sync fastapi docs from b5ca1324 on 2025-12-07
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
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
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
# Test with parts from, and to verify the report in:
|
||||
# https://github.com/fastapi/fastapi/discussions/14177
|
||||
# Made an issue in:
|
||||
# https://github.com/fastapi/fastapi/issues/14247
|
||||
from enum import Enum
|
||||
from typing import List
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.testclient import TestClient
|
||||
from inline_snapshot import snapshot
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from tests.utils import pydantic_snapshot
|
||||
|
||||
|
||||
class MessageEventType(str, Enum):
|
||||
alpha = "alpha"
|
||||
beta = "beta"
|
||||
|
||||
|
||||
class MessageEvent(BaseModel):
|
||||
event_type: MessageEventType = Field(default=MessageEventType.alpha)
|
||||
output: str
|
||||
|
||||
|
||||
class MessageOutput(BaseModel):
|
||||
body: str = ""
|
||||
events: List[MessageEvent] = []
|
||||
|
||||
|
||||
class Message(BaseModel):
|
||||
input: str
|
||||
output: MessageOutput
|
||||
|
||||
|
||||
app = FastAPI(title="Minimal FastAPI App", version="1.0.0")
|
||||
|
||||
|
||||
@app.post("/messages", response_model=Message)
|
||||
async def create_message(input_message: str) -> Message:
|
||||
return Message(
|
||||
input=input_message,
|
||||
output=MessageOutput(body=f"Processed: {input_message}"),
|
||||
)
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_create_message():
|
||||
response = client.post("/messages", params={"input_message": "Hello"})
|
||||
assert response.status_code == 200, response.text
|
||||
assert response.json() == {
|
||||
"input": "Hello",
|
||||
"output": {"body": "Processed: Hello", "events": []},
|
||||
}
|
||||
|
||||
|
||||
def test_openapi_schema():
|
||||
response = client.get("/openapi.json")
|
||||
assert response.status_code == 200, response.text
|
||||
assert response.json() == snapshot(
|
||||
{
|
||||
"openapi": "3.1.0",
|
||||
"info": {"title": "Minimal FastAPI App", "version": "1.0.0"},
|
||||
"paths": {
|
||||
"/messages": {
|
||||
"post": {
|
||||
"summary": "Create Message",
|
||||
"operationId": "create_message_messages_post",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "input_message",
|
||||
"in": "query",
|
||||
"required": True,
|
||||
"schema": {"type": "string", "title": "Input Message"},
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful Response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Message"
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"422": {
|
||||
"description": "Validation Error",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/HTTPValidationError"
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"HTTPValidationError": {
|
||||
"properties": {
|
||||
"detail": {
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/ValidationError"
|
||||
},
|
||||
"type": "array",
|
||||
"title": "Detail",
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"title": "HTTPValidationError",
|
||||
},
|
||||
"Message": {
|
||||
"properties": {
|
||||
"input": {"type": "string", "title": "Input"},
|
||||
"output": {"$ref": "#/components/schemas/MessageOutput"},
|
||||
},
|
||||
"type": "object",
|
||||
"required": ["input", "output"],
|
||||
"title": "Message",
|
||||
},
|
||||
"MessageEvent": {
|
||||
"properties": {
|
||||
"event_type": pydantic_snapshot(
|
||||
v2=snapshot(
|
||||
{
|
||||
"$ref": "#/components/schemas/MessageEventType",
|
||||
"default": "alpha",
|
||||
}
|
||||
),
|
||||
v1=snapshot(
|
||||
{
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/MessageEventType"
|
||||
}
|
||||
],
|
||||
"default": "alpha",
|
||||
}
|
||||
),
|
||||
),
|
||||
"output": {"type": "string", "title": "Output"},
|
||||
},
|
||||
"type": "object",
|
||||
"required": ["output"],
|
||||
"title": "MessageEvent",
|
||||
},
|
||||
"MessageEventType": pydantic_snapshot(
|
||||
v2=snapshot(
|
||||
{
|
||||
"type": "string",
|
||||
"enum": ["alpha", "beta"],
|
||||
"title": "MessageEventType",
|
||||
}
|
||||
),
|
||||
v1=snapshot(
|
||||
{
|
||||
"type": "string",
|
||||
"enum": ["alpha", "beta"],
|
||||
"title": "MessageEventType",
|
||||
"description": "An enumeration.",
|
||||
}
|
||||
),
|
||||
),
|
||||
"MessageOutput": {
|
||||
"properties": {
|
||||
"body": {"type": "string", "title": "Body", "default": ""},
|
||||
"events": {
|
||||
"items": {"$ref": "#/components/schemas/MessageEvent"},
|
||||
"type": "array",
|
||||
"title": "Events",
|
||||
"default": [],
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
"title": "MessageOutput",
|
||||
},
|
||||
"ValidationError": {
|
||||
"properties": {
|
||||
"loc": {
|
||||
"items": {
|
||||
"anyOf": [{"type": "string"}, {"type": "integer"}]
|
||||
},
|
||||
"type": "array",
|
||||
"title": "Location",
|
||||
},
|
||||
"msg": {"type": "string", "title": "Message"},
|
||||
"type": {"type": "string", "title": "Error Type"},
|
||||
},
|
||||
"type": "object",
|
||||
"required": ["loc", "msg", "type"],
|
||||
"title": "ValidationError",
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user