1 changed files with 81 additions and 0 deletions
@ -0,0 +1,81 @@ |
|||
import pytest |
|||
from fastapi import FastAPI |
|||
from fastapi._compat import PYDANTIC_V2, GenerateJsonSchema |
|||
from fastapi.openapi.utils import get_openapi |
|||
|
|||
app = FastAPI() |
|||
|
|||
|
|||
@app.get("/") |
|||
def read_root(): |
|||
pass # pragma: no cover |
|||
|
|||
|
|||
# Custom schema generator that does nothing but tracks if it was called |
|||
class CustomJsonSchemaGenerator(GenerateJsonSchema): |
|||
def __init__(self): |
|||
super().__init__() |
|||
self.called = False |
|||
|
|||
def generate_definitions(self, *args, **kwargs): |
|||
self.called = True |
|||
return super().generate_definitions(*args, **kwargs) |
|||
|
|||
|
|||
def test_custom_schema_generator_called(): |
|||
custom_schema_generator = CustomJsonSchemaGenerator() |
|||
get_openapi( |
|||
title=app.title, |
|||
version=app.version, |
|||
routes=app.routes, |
|||
schema_generator=custom_schema_generator, |
|||
) |
|||
|
|||
if PYDANTIC_V2: |
|||
assert custom_schema_generator.called is True |
|||
else: |
|||
assert ( # Pydantic v1 does not use custom schema generators |
|||
custom_schema_generator.called is False |
|||
) |
|||
|
|||
|
|||
@pytest.mark.parametrize("use_custom_schema_generator", [True, False]) |
|||
def test_custom_schema_generator_openapi(use_custom_schema_generator: bool): |
|||
custom_schema_generator = ( |
|||
CustomJsonSchemaGenerator() if use_custom_schema_generator else None |
|||
) |
|||
openapi = get_openapi( |
|||
title=app.title, |
|||
version=app.version, |
|||
routes=app.routes, |
|||
schema_generator=custom_schema_generator, |
|||
) |
|||
|
|||
assert openapi == OPENAPI_SCHEMA |
|||
|
|||
|
|||
OPENAPI_SCHEMA = { |
|||
"info": { |
|||
"title": "FastAPI", |
|||
"version": "0.1.0", |
|||
}, |
|||
"openapi": "3.1.0", |
|||
"paths": { |
|||
"/": { |
|||
"get": { |
|||
"operationId": "read_root__get", |
|||
"responses": { |
|||
"200": { |
|||
"content": { |
|||
"application/json": { |
|||
"schema": {}, |
|||
}, |
|||
}, |
|||
"description": "Successful Response", |
|||
}, |
|||
}, |
|||
"summary": "Read Root", |
|||
}, |
|||
}, |
|||
}, |
|||
} |
Loading…
Reference in new issue