mirror of
https://github.com/LukeHagar/connexion.git
synced 2025-12-06 04:19:26 +00:00
This PR adds a `jsonifier` argument to the app and api to align it with other customization options. We also no longer pass it via the operation object, which brings us closer to operations as data class only.
226 lines
6.6 KiB
Python
226 lines
6.6 KiB
Python
from connexion import FlaskApp
|
|
from connexion.operations import OpenAPIOperation
|
|
from connexion.resolver import MethodResolver, MethodViewResolver, Resolver
|
|
|
|
from conftest import build_app_from_fixture
|
|
|
|
COMPONENTS = {"parameters": {"myparam": {"in": "path", "schema": {"type": "integer"}}}}
|
|
|
|
|
|
def test_standard_resolve_x_router_controller():
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="endpoint",
|
|
path_parameters=[],
|
|
operation={
|
|
"x-openapi-router-controller": "fakeapi.hello",
|
|
"operationId": "post_greeting",
|
|
},
|
|
components=COMPONENTS,
|
|
resolver=Resolver(),
|
|
)
|
|
assert operation.operation_id == "fakeapi.hello.post_greeting"
|
|
|
|
|
|
def test_methodview_resolve_operation_id(method_view_resolver):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="endpoint",
|
|
path_parameters=[],
|
|
operation={
|
|
"operationId": "fakeapi.hello.post_greeting",
|
|
},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.hello.post_greeting"
|
|
|
|
|
|
def test_methodview_resolve_x_router_controller_with_operation_id(method_view_resolver):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="endpoint",
|
|
path_parameters=[],
|
|
operation={
|
|
"x-openapi-router-controller": "fakeapi.PetsView",
|
|
"operationId": "post_greeting",
|
|
},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.post_greeting"
|
|
|
|
|
|
def test_methodview_resolve_x_router_controller_without_operation_id(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/hello/{id}",
|
|
path_parameters=[],
|
|
operation={"x-openapi-router-controller": "fakeapi.pets"},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.get"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name(method_view_resolver):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/pets/{id}",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.get"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_lowercase_verb(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="get",
|
|
path="/pets/{id}",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.get"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_will_translate_dashes_in_resource_name(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/pets",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.search"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_can_resolve_api_root(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver(
|
|
"fakeapi.pets",
|
|
),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.get"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_will_resolve_resource_root_get_as_search(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/pets",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.search"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_and_x_router_controller_will_resolve_resource_root_get_as_search(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/hello",
|
|
path_parameters=[],
|
|
operation={
|
|
"x-openapi-router-controller": "fakeapi.pets",
|
|
},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.search"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_will_resolve_resource_root_as_configured(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/pets",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi", "api_list"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.api_list"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_will_resolve_resource_root_post_as_post(
|
|
method_view_resolver,
|
|
):
|
|
operation = OpenAPIOperation(
|
|
method="POST",
|
|
path="/pets",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=method_view_resolver("fakeapi"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.post"
|
|
|
|
|
|
def test_method_view_resolver_integration(spec):
|
|
method_view_app = build_app_from_fixture(
|
|
"method_view",
|
|
app_class=FlaskApp,
|
|
spec_file=spec,
|
|
resolver=MethodViewResolver("fakeapi.example_method_view"),
|
|
)
|
|
|
|
client = method_view_app.test_client()
|
|
|
|
r = client.get("/v1.0/pets")
|
|
assert r.json() == [{"name": "get"}]
|
|
|
|
r = client.get("/v1.0/pets/1")
|
|
assert r.json() == {"name": "get", "petId": 1}
|
|
|
|
r = client.post("/v1.0/pets", json={"name": "Musti"})
|
|
assert r.json() == {"name": "post", "body": {"name": "Musti"}}
|
|
|
|
r = client.put("/v1.0/pets/1", json={"name": "Igor"})
|
|
assert r.json() == {"name": "put", "petId": 1, "body": {"name": "Igor"}}
|
|
|
|
|
|
def test_method_resolver_integration(spec, app_class):
|
|
method_view_app = build_app_from_fixture(
|
|
"method_view",
|
|
app_class=app_class,
|
|
spec_file=spec,
|
|
resolver=MethodResolver("fakeapi.example_method_class"),
|
|
)
|
|
|
|
client = method_view_app.test_client()
|
|
|
|
r = client.get("/v1.0/pets")
|
|
assert r.json() == [{"name": "search"}]
|
|
|
|
r = client.get("/v1.0/pets/1")
|
|
assert r.json() == {"name": "get", "petId": 1}
|
|
|
|
r = client.post("/v1.0/pets", json={"name": "Musti"})
|
|
assert r.json() == {"name": "post", "body": {"name": "Musti"}}
|
|
|
|
r = client.put("/v1.0/pets/1", json={"name": "Igor"})
|
|
assert r.json() == {"name": "put", "petId": 1, "body": {"name": "Igor"}}
|