Files
connexion/tests/test_resolver_methodview.py
Robbe Sneyders 4f6ddfb0a0 Add jsonifier as argument to app / api (#1656)
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.
2023-03-02 22:00:47 +01:00

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"}}