Files
connexion/tests/test_mock.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

319 lines
8.5 KiB
Python

from connexion.mock import MockResolver
from connexion.operations import OpenAPIOperation, Swagger2Operation
def test_mock_resolver_default():
resolver = MockResolver(mock_all=True)
responses = {"default": {"examples": {"application/json": {"foo": "bar"}}}}
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == {"foo": "bar"}
def test_mock_resolver_numeric():
resolver = MockResolver(mock_all=True)
responses = {"200": {"examples": {"application/json": {"foo": "bar"}}}}
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == {"foo": "bar"}
def test_mock_resolver_example():
resolver = MockResolver(mock_all=True)
responses = {
"default": {
"schema": {
"type": "object",
"properties": {"foo": {"type": "string"}},
"example": {"foo": "bar"},
}
}
}
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == {"foo": "bar"}
def test_mock_resolver_example_nested_in_object():
resolver = MockResolver(mock_all=True)
responses = {
"default": {
"schema": {
"type": "object",
"properties": {"foo": {"type": "string", "example": "bar"}},
}
}
}
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == {"foo": "bar"}
def test_mock_resolver_example_nested_in_list():
resolver = MockResolver(mock_all=True)
responses = {
"default": {
"schema": {
"type": "array",
"items": {"type": "string", "example": "bar"},
}
}
}
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == ["bar"]
def test_mock_resolver_example_nested_in_object_openapi():
resolver = MockResolver(mock_all=True)
responses = {
"default": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {"foo": {"type": "string", "example": "bar"}},
}
}
}
}
}
operation = OpenAPIOperation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == {"foo": "bar"}
def test_mock_resolver_example_nested_in_list_openapi():
resolver = MockResolver(mock_all=True)
responses = {
"default": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"type": "string", "example": "bar"},
}
}
}
}
}
operation = OpenAPIOperation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == ["bar"]
def test_mock_resolver_no_example_nested_in_object():
resolver = MockResolver(mock_all=True)
responses = {
"200": {
"schema": {
"type": "object",
"properties": {
"foo": {
"type": "string",
}
},
}
}
}
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 200
assert response == "No example response was defined."
def test_mock_resolver_no_example_nested_in_list_openapi():
resolver = MockResolver(mock_all=True)
responses = {
"202": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string",
},
}
}
}
}
}
operation = OpenAPIOperation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 202
assert response == "No example response was defined."
def test_mock_resolver_no_examples():
resolver = MockResolver(mock_all=True)
responses = {"418": {}}
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"responses": responses},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "mock-1"
response, status_code = resolver.mock_operation(operation)
assert status_code == 418
assert response == "No example response was defined."
def test_mock_resolver_notimplemented():
resolver = MockResolver(mock_all=False)
responses = {"418": {}}
# do not mock the existent functions
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={"operationId": "fakeapi.hello.get"},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
assert operation.operation_id == "fakeapi.hello.get"
# mock only the nonexistent ones
operation = Swagger2Operation(
method="GET",
path="endpoint",
path_parameters=[],
operation={
"operationId": "fakeapi.hello.nonexistent_function",
"responses": responses,
},
app_produces=["application/json"],
app_consumes=["application/json"],
definitions={},
resolver=resolver,
)
# check if it is using the mock function
assert operation._resolution.function() == ("No example response was defined.", 418)