81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
from typing import Callable
|
|
|
|
import pytest
|
|
|
|
from openapi_pydantic.compat import PYDANTIC_V2
|
|
from openapi_pydantic.v3 import v3_0, v3_1
|
|
|
|
|
|
@pytest.mark.parametrize("version", ["3.0.4", "3.1.1"])
|
|
def test_parse_with_callback(version: str) -> None:
|
|
data = {
|
|
"openapi": version,
|
|
"info": {"title": "API with Callback", "version": ""},
|
|
"paths": {
|
|
"/create": {
|
|
"post": {
|
|
"responses": {"200": {"description": "Success"}},
|
|
"callbacks": {
|
|
"event": {
|
|
"callback": {
|
|
"post": {
|
|
"responses": {"200": {"description": "Success"}}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
}
|
|
}
|
|
},
|
|
}
|
|
|
|
if version == "3.0.4":
|
|
model_validate_3_0: Callable[[dict], v3_0.OpenAPI] = getattr(
|
|
v3_0.OpenAPI, "model_validate" if PYDANTIC_V2 else "parse_obj"
|
|
)
|
|
assert model_validate_3_0(data) == v3_0.OpenAPI(
|
|
info=v3_0.Info(title="API with Callback", version=""),
|
|
paths={
|
|
"/create": v3_0.PathItem(
|
|
post=v3_0.Operation(
|
|
responses={"200": v3_0.Response(description="Success")},
|
|
callbacks={
|
|
"event": {
|
|
"callback": v3_0.PathItem(
|
|
post=v3_0.Operation(
|
|
responses={
|
|
"200": v3_0.Response(description="Success")
|
|
}
|
|
)
|
|
)
|
|
}
|
|
},
|
|
)
|
|
)
|
|
},
|
|
)
|
|
else:
|
|
model_validate_3_1: Callable[[dict], v3_1.OpenAPI] = getattr(
|
|
v3_1.OpenAPI, "model_validate" if PYDANTIC_V2 else "parse_obj"
|
|
)
|
|
assert model_validate_3_1(data) == v3_1.OpenAPI(
|
|
info=v3_1.Info(title="API with Callback", version=""),
|
|
paths={
|
|
"/create": v3_1.PathItem(
|
|
post=v3_1.Operation(
|
|
responses={"200": v3_1.Response(description="Success")},
|
|
callbacks={
|
|
"event": {
|
|
"callback": v3_1.PathItem(
|
|
post=v3_1.Operation(
|
|
responses={
|
|
"200": v3_1.Response(description="Success")
|
|
}
|
|
)
|
|
)
|
|
}
|
|
},
|
|
)
|
|
)
|
|
},
|
|
)
|