mirror of
https://github.com/LukeHagar/connexion.git
synced 2025-12-06 12:27:45 +00:00
Works towards #1531 Some parts of the old outing docs will need to be included on the `parameters` and `swagger-ui` pages which we still need to add.
237 lines
7.0 KiB
Python
237 lines
7.0 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_method_resolve_with_default_module_name_will_resolve_resource_root_as_configured():
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/pets",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=MethodResolver("fakeapi", collection_endpoint_name="api_list"),
|
|
)
|
|
assert operation.operation_id == "fakeapi.PetsView.api_list"
|
|
|
|
|
|
def test_methodview_resolve_with_default_module_name_will_resolve_resource_root_as_configured():
|
|
operation = OpenAPIOperation(
|
|
method="GET",
|
|
path="/pets",
|
|
path_parameters=[],
|
|
operation={},
|
|
components=COMPONENTS,
|
|
resolver=MethodViewResolver("fakeapi", collection_endpoint_name="api_list"),
|
|
)
|
|
# The collection_endpoint_name is ignored
|
|
assert operation.operation_id == "fakeapi.PetsView.search"
|
|
|
|
|
|
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"}}
|