Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/test_apiresponse.py
# Copyright (C) 2015-2019 The Software Heritage developers | # Copyright (C) 2015-2019 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU Affero General Public License version 3, or any later version | # License: GNU Affero General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import json | import json | ||||
from swh.web.api.apiresponse import ( | from swh.web.api.apiresponse import ( | ||||
compute_link_header, transform, make_api_response, | compute_link_header, transform, make_api_response, | ||||
filter_by_fields | filter_by_fields | ||||
) | ) | ||||
def test_compute_link_header(api_request_factory): | def test_compute_link_header(): | ||||
next_link = '/api/endpoint/next' | next_link = '/api/endpoint/next' | ||||
prev_link = '/api/endpoint/prev' | prev_link = '/api/endpoint/prev' | ||||
rv = { | rv = { | ||||
'headers': {'link-next': next_link, 'link-prev': prev_link}, | 'headers': {'link-next': next_link, 'link-prev': prev_link}, | ||||
'results': [1, 2, 3] | 'results': [1, 2, 3] | ||||
} | } | ||||
options = {} | options = {} | ||||
request = api_request_factory.get('/api/endpoint/') | headers = compute_link_header(rv, options) | ||||
headers = compute_link_header(request, rv, options) | |||||
assert headers == { | assert headers == { | ||||
'Link': (f'<{request.build_absolute_uri(next_link)}>; rel="next",' | 'Link': (f'<{next_link}>; rel="next",' | ||||
f'<{request.build_absolute_uri(prev_link)}>; rel="previous"') | f'<{prev_link}>; rel="previous"') | ||||
} | } | ||||
def test_compute_link_header_nothing_changed(api_request_factory): | def test_compute_link_header_nothing_changed(): | ||||
rv = {} | rv = {} | ||||
options = {} | options = {} | ||||
request = api_request_factory.get('/api/test/path/') | headers = compute_link_header(rv, options) | ||||
headers = compute_link_header(request, rv, options) | |||||
assert headers == {} | assert headers == {} | ||||
def test_compute_link_header_nothing_changed_2(api_request_factory): | def test_compute_link_header_nothing_changed_2(): | ||||
rv = {'headers': {}} | rv = {'headers': {}} | ||||
options = {} | options = {} | ||||
request = api_request_factory.get('/api/test/path/') | headers = compute_link_header(rv, options) | ||||
headers = compute_link_header(request, rv, options) | |||||
assert headers == {} | assert headers == {} | ||||
def test_transform_only_return_results_1(): | def test_transform_only_return_results_1(): | ||||
rv = {'results': {'some-key': 'some-value'}} | rv = {'results': {'some-key': 'some-value'}} | ||||
assert transform(rv) == {'some-key': 'some-value'} | assert transform(rv) == {'some-key': 'some-value'} | ||||
def test_transform_only_return_results_2(): | def test_transform_only_return_results_2(): | ||||
rv = {'headers': {'something': 'do changes'}, | rv = {'headers': {'something': 'do changes'}, | ||||
'results': {'some-key': 'some-value'}} | 'results': {'some-key': 'some-value'}} | ||||
assert transform(rv) == {'some-key': 'some-value'} | assert transform(rv) == {'some-key': 'some-value'} | ||||
def test_transform_do_remove_headers(): | def test_transform_do_remove_headers(): | ||||
rv = {'headers': {'something': 'do changes'}, | rv = {'headers': {'something': 'do changes'}, | ||||
'some-key': 'some-value'} | 'some-key': 'some-value'} | ||||
assert transform(rv) == {'some-key': 'some-value'} | assert transform(rv) == {'some-key': 'some-value'} | ||||
def test_transform_do_nothing(): | def test_transform_do_nothing(): | ||||
rv = {'some-key': 'some-value'} | rv = {'some-key': 'some-value'} | ||||
assert transform(rv) == {'some-key': 'some-value'} | assert transform(rv) == {'some-key': 'some-value'} | ||||
def test_swh_multi_response_mimetype(mocker, api_request_factory): | def test_swh_multi_response_mimetype(mocker, api_request_factory): | ||||
mock_shorten_path = mocker.patch('swh.web.api.apiresponse.shorten_path') | mock_shorten_path = mocker.patch('swh.web.api.apiresponse.shorten_path') | ||||
mock_filter = mocker.patch('swh.web.api.apiresponse.filter_by_fields') | mock_filter = mocker.patch('swh.web.api.apiresponse.filter_by_fields') | ||||
mock_json = mocker.patch('swh.web.api.apiresponse.json') | mock_json = mocker.patch('swh.web.api.apiresponse.json') | ||||
Show All 15 Lines | for format in accepted_response_formats: | ||||
mime_type = accepted_response_formats[format] | mime_type = accepted_response_formats[format] | ||||
setattr(request, 'accepted_media_type', mime_type) | setattr(request, 'accepted_media_type', mime_type) | ||||
if mime_type == 'text/html': | if mime_type == 'text/html': | ||||
expected_data = { | expected_data = { | ||||
'response_data': json.dumps(data), | 'response_data': json.dumps(data), | ||||
'request': { | |||||
'path': request.path, | |||||
'method': request.method, | |||||
'absolute_uri': request.build_absolute_uri() | |||||
}, | |||||
'headers_data': {}, | 'headers_data': {}, | ||||
'heading': 'my_short_path', | 'heading': 'my_short_path', | ||||
'status_code': 200 | 'status_code': 200 | ||||
} | } | ||||
mock_json.dumps.return_value = json.dumps(data) | mock_json.dumps.return_value = json.dumps(data) | ||||
else: | else: | ||||
expected_data = data | expected_data = data | ||||
Show All 38 Lines |