committed by
GitHub
2 changed files with 92 additions and 1 deletions
@ -0,0 +1,91 @@ |
|||
from fastapi import Depends, FastAPI |
|||
from pydantic import BaseModel |
|||
from starlette.testclient import TestClient |
|||
|
|||
app = FastAPI() |
|||
|
|||
|
|||
class ModelB(BaseModel): |
|||
username: str |
|||
|
|||
|
|||
class ModelC(ModelB): |
|||
password: str |
|||
|
|||
|
|||
class ModelA(BaseModel): |
|||
name: str |
|||
description: str = None |
|||
model_b: ModelB |
|||
|
|||
|
|||
async def get_model_c() -> ModelC: |
|||
return ModelC(username="test-user", password="test-password") |
|||
|
|||
|
|||
@app.get("/model", response_model=ModelA) |
|||
async def get_model_a(model_c=Depends(get_model_c)): |
|||
return {"name": "model-a-name", "description": "model-a-desc", "model_b": model_c} |
|||
|
|||
|
|||
client = TestClient(app) |
|||
|
|||
|
|||
openapi_schema = { |
|||
"openapi": "3.0.2", |
|||
"info": {"title": "Fast API", "version": "0.1.0"}, |
|||
"paths": { |
|||
"/model": { |
|||
"get": { |
|||
"summary": "Get Model A", |
|||
"operationId": "get_model_a_model_get", |
|||
"responses": { |
|||
"200": { |
|||
"description": "Successful Response", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": {"$ref": "#/components/schemas/ModelA"} |
|||
} |
|||
}, |
|||
} |
|||
}, |
|||
} |
|||
} |
|||
}, |
|||
"components": { |
|||
"schemas": { |
|||
"ModelA": { |
|||
"title": "ModelA", |
|||
"required": ["name", "model_b"], |
|||
"type": "object", |
|||
"properties": { |
|||
"name": {"title": "Name", "type": "string"}, |
|||
"description": {"title": "Description", "type": "string"}, |
|||
"model_b": {"$ref": "#/components/schemas/ModelB"}, |
|||
}, |
|||
}, |
|||
"ModelB": { |
|||
"title": "ModelB", |
|||
"required": ["username"], |
|||
"type": "object", |
|||
"properties": {"username": {"title": "Username", "type": "string"}}, |
|||
}, |
|||
} |
|||
}, |
|||
} |
|||
|
|||
|
|||
def test_openapi_schema(): |
|||
response = client.get("/openapi.json") |
|||
assert response.status_code == 200 |
|||
assert response.json() == openapi_schema |
|||
|
|||
|
|||
def test_filter_sub_model(): |
|||
response = client.get("/model") |
|||
assert response.status_code == 200 |
|||
assert response.json() == { |
|||
"name": "model-a-name", |
|||
"description": "model-a-desc", |
|||
"model_b": {"username": "test-user"}, |
|||
} |
Loading…
Reference in new issue