Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion explorer/rest/tests/facade/test_NemRestFacade.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@


class TestNemRestFacade(DatabaseTestBase): # pylint: disable=too-many-public-methods

def setUp(self):
super().setUp()
self.nem_rest_facade = NemRestFacade(self.db_config, RestConfig(
Expand Down
155 changes: 63 additions & 92 deletions explorer/rest/tests/test_rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,57 @@ def _assert_status_code_and_headers(response, expected_status_code):
assert response.headers['Access-Control-Allow-Origin'] == '*'


def _assert_status_code_400(response, expected_message):
_assert_status_code_and_headers(response, 400)
assert {
'message': expected_message,
'status': 400
} == response.json


def _get_api(client, endpoint, **query_params): # pylint: disable=redefined-outer-name
query_string = '&'.join(f'{key}={val}' for key, val in query_params.items())
return client.get(f'/api/nem/{endpoint}?{query_string}')


def test_invalid_pagination_params(client): # pylint: disable=redefined-outer-name

for module in ['blocks', 'accounts', 'namespaces']:
# Act:
response = client.get(f'/api/nem/{module}', query_string={'limit': -1})

_assert_status_code_400(response, 'Limit and offset must be greater than or equal to 0')

# Act:
response = client.get(f'/api/nem/{module}', query_string={'offset': -1})

_assert_status_code_400(response, 'Limit and offset must be greater than or equal to 0')


def test_invalid_sort_params(client): # pylint: disable=redefined-outer-name

for module in ['blocks', 'namespaces']:
# Act:
response = client.get(f'/api/nem/{module}', query_string={'sort': 'INVALID'})

# Assert:
_assert_status_code_400(response, 'Sort must be either ASC or DESC')


def test_data_not_found(client): # pylint: disable=redefined-outer-name

for module, params in [('block', '/3'), ('account', '?address=NANEMOABLAGR72AZ2RV3V4ZHDCXW25XQ73O7OBT5'), ('namespace', '/nonexistent')]:
# Act:
response = client.get(f'/api/nem/{module}{params}')

# Assert:
_assert_status_code_and_headers(response, 404)
assert {
'message': 'Resource not found',
'status': 404
} == response.json


# region /block/<height>

def _assert_get_api_nem_block_by_height(client, height, expected_status_code, expected_result): # pylint: disable=redefined-outer-name
Expand All @@ -91,13 +142,6 @@ def test_api_nem_block_by_height(client): # pylint: disable=redefined-outer-nam
_assert_get_api_nem_block_by_height(client, 1, 200, EXPECTED_BLOCK_VIEW_1.to_dict())


def test_api_nem_block_non_exist(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_block_by_height(client, 3, 404, {
'message': 'Resource not found',
'status': 404
})


def test_api_nem_block_by_invalid_height(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_block_by_height(client, 0, 400, {
'message': 'Height must be greater than or equal to 1',
Expand All @@ -109,32 +153,15 @@ def test_api_nem_block_by_invalid_height(client): # pylint: disable=redefined-o

# region /blocks

def _get_api_nem_blocks(client, **query_params): # pylint: disable=redefined-outer-name
query_string = '&'.join(f'{key}={val}' for key, val in query_params.items())
return client.get(f'/api/nem/blocks?{query_string}')


def _assert_get_api_nem_blocks(client, expected_status_code, expected_result, **query_params): # pylint: disable=redefined-outer-name
# Act:
response = _get_api_nem_blocks(client, **query_params)
response = _get_api(client, 'blocks', **query_params)

# Assert:
_assert_status_code_and_headers(response, expected_status_code)
assert expected_result == response.json


def _assert_get_api_nem_blocks_fail(client, expected_message, **query_params): # pylint: disable=redefined-outer-name
# Act:
response = _get_api_nem_blocks(client, **query_params)

# Assert:
_assert_status_code_and_headers(response, 400)
assert {
'message': expected_message,
'status': 400
} == response.json


def test_api_nem_blocks_without_params(client): # pylint: disable=redefined-outer-name
# Act:
response = client.get('/api/nem/blocks')
Expand Down Expand Up @@ -169,19 +196,15 @@ def test_api_nem_blocks_with_all_params(client): # pylint: disable=redefined-ou


def test_api_nem_blocks_invalid_min_height(client): # pylint: disable=redefined-outer-name, invalid-name
_assert_get_api_nem_blocks_fail(client, 'Minimum height must be greater than or equal to 1', min_height=0)


def test_api_nem_blocks_invalid_limit(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_blocks_fail(client, 'Limit and offset must be greater than or equal to 0', limit=-1)


def test_api_nem_blocks_invalid_offset(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_blocks_fail(client, 'Limit and offset must be greater than or equal to 0', offset=-1)

# Act:
response = _get_api(client, 'blocks', min_height=0)

def test_api_nem_blocks_invalid_sort(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_blocks_fail(client, 'Sort must be either ASC or DESC', sort='invalid')
# Assert:
_assert_status_code_and_headers(response, 400)
assert {
'message': 'Minimum height must be greater than or equal to 1',
'status': 400
} == response.json

# endregion

Expand Down Expand Up @@ -243,25 +266,14 @@ def test_api_nem_account_invalid_public_key(client): # pylint: disable=redefine
_assert_get_nem_account_bad_request(client, 'Invalid public key format', publicKey='INVALIDPUBLICKEY')


def test_api_nem_account_not_found(client): # pylint: disable=redefined-outer-name
# Act:
response = client.get('/api/nem/account?address=NANEMOABLAGR72AZ2RV3V4ZHDCXW25XQ73O7OBT5')

# Assert:
_assert_status_code_and_headers(response, 404)
assert {
'message': 'Resource not found',
'status': 404
} == response.json

# endregion

# region /accounts


def _assert_get_nem_accounts_bad_request(client, expected_message, **query_params): # pylint: disable=redefined-outer-name
# Act:
response = client.get('/api/nem/accounts', query_string=query_params)
response = _get_api(client, 'accounts', **query_params)

# Assert:
_assert_status_code_and_headers(response, 400)
Expand All @@ -272,12 +284,8 @@ def _assert_get_nem_accounts_bad_request(client, expected_message, **query_param


def _assert_get_api_nem_accounts(client, expected_status_code, expected_result, **query_params): # pylint: disable=redefined-outer-name
# Arrange:
query_string = '&'.join(f'{key}={val}' for key, val in query_params.items())
client.get(f'/api/nem/accounts?{query_string}')

# Act:
response = client.get(f'/api/nem/accounts?{query_string}')
response = _get_api(client, 'accounts', **query_params)

# Assert:
_assert_status_code_and_headers(response, expected_status_code)
Expand Down Expand Up @@ -310,14 +318,6 @@ def test_api_nem_accounts_applies_sorted_by_balance_asc(client): # pylint: disa
_assert_get_api_nem_accounts(client, 200, [ACCOUNT_VIEWS[0].to_dict(), ACCOUNT_VIEWS[1].to_dict()], sort_field='BALANCE', sort_order='ASC')


def test_api_nem_accounts_invalid_limit(client): # pylint: disable=redefined-outer-name
_assert_get_nem_accounts_bad_request(client, 'Limit and offset must be greater than or equal to 0', limit=-1)


def test_api_nem_accounts_invalid_offset(client): # pylint: disable=redefined-outer-name, invalid-name
_assert_get_nem_accounts_bad_request(client, 'Limit and offset must be greater than or equal to 0', offset=-1)


def test_api_nem_accounts_invalid_sort_field(client): # pylint: disable=redefined-outer-name, invalid-name
_assert_get_nem_accounts_bad_request(client, 'Sort field must be BALANCE', sort_field='INVALID')

Expand Down Expand Up @@ -428,32 +428,15 @@ def test_api_namespace_by_name_not_found(client): # pylint: disable=redefined-o

# region /namespaces

def _get_api_nem_namespaces(client, **query_params): # pylint: disable=redefined-outer-name
query_string = '&'.join(f'{key}={val}' for key, val in query_params.items())
return client.get(f'/api/nem/namespaces?{query_string}')


def _assert_get_api_nem_namespaces(client, expected_status_code, expected_result, **query_params): # pylint: disable=redefined-outer-name
# Act:
response = _get_api_nem_namespaces(client, **query_params)
response = _get_api(client, 'namespaces', **query_params)

# Assert:
_assert_status_code_and_headers(response, expected_status_code)
assert expected_result == response.json


def _assert_get_api_nem_namespaces_fail(client, expected_message, **query_params): # pylint: disable=redefined-outer-name
# Act:
response = _get_api_nem_namespaces(client, **query_params)

# Assert:
_assert_status_code_and_headers(response, 400)
assert {
'message': expected_message,
'status': 400
} == response.json


def test_api_namespaces_without_params(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_namespaces(client, 200, [NAMESPACE_VIEWS[1].to_dict(), NAMESPACE_VIEWS[0].to_dict()])

Expand Down Expand Up @@ -485,16 +468,4 @@ def test_api_namespaces_with_all_params(client): # pylint: disable=redefined-ou
)


def test_api_namespaces_invalid_sort(client): # pylint: disable=redefined-outer-name, invalid-name
_assert_get_api_nem_namespaces_fail(client, 'Sort must be either ASC or DESC', sort='INVALID')


def test_api_namespaces_invalid_limit(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_namespaces_fail(client, 'Limit and offset must be greater than or equal to 0', limit=-1)


def test_api_namespaces_invalid_offset(client): # pylint: disable=redefined-outer-name
_assert_get_api_nem_namespaces_fail(client, 'Limit and offset must be greater than or equal to 0', offset=-1)


# endregion