Files
connexion/tests/test_mock.py
Mark Perryman 96bdcb010a Objects and Arrays recursively construct examples (#1148)
* Objects and Arrays recusively construct examples from examples of their children

* Added Tests for No Example Found
2020-02-10 17:37:11 +01:00

392 lines
14 KiB
Python

from connexion.mock import MockResolver
from connexion.operations import Swagger2Operation, OpenAPIOperation
def test_mock_resolver_default():
resolver = MockResolver(mock_all=True)
responses = {
'default': {
'examples': {
'application/json': {
'foo': 'bar'
}
}
}
}
operation = Swagger2Operation(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_security=[],
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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_security=[],
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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_security=[],
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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_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(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'operationId': 'fakeapi.hello.get'
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_definitions={},
resolver=resolver)
assert operation.operation_id == 'fakeapi.hello.get'
# mock only the nonexistent ones
operation = Swagger2Operation(api=None,
method='GET',
path='endpoint',
path_parameters=[],
operation={
'operationId': 'fakeapi.hello.nonexistent_function',
'responses': responses
},
app_produces=['application/json'],
app_consumes=['application/json'],
app_security=[],
security_definitions={},
definitions={},
parameter_definitions={},
resolver=resolver)
# check if it is using the mock function
assert operation._resolution.function() == ('No example response was defined.', 418)