Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/test_apiresponse.py
# Copyright (C) 2015-2018 The Software Heritage developers | # Copyright (C) 2015-2018 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 rest_framework.test import APIRequestFactory | from rest_framework.test import APIRequestFactory | ||||
from nose.tools import istest | |||||
from unittest.mock import patch | from unittest.mock import patch | ||||
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 | ||||
) | ) | ||||
from swh.web.tests.testcase import SWHWebTestCase | from swh.web.tests.testcase import SWHWebTestCase | ||||
api_request_factory = APIRequestFactory() | api_request_factory = APIRequestFactory() | ||||
class SWHComputeLinkHeaderTest(SWHWebTestCase): | class SWHComputeLinkHeaderTest(SWHWebTestCase): | ||||
@istest | def test_compute_link_header(self): | ||||
def compute_link_header(self): | |||||
rv = { | rv = { | ||||
'headers': {'link-next': 'foo', 'link-prev': 'bar'}, | 'headers': {'link-next': 'foo', 'link-prev': 'bar'}, | ||||
'results': [1, 2, 3] | 'results': [1, 2, 3] | ||||
} | } | ||||
options = {} | options = {} | ||||
# when | # when | ||||
headers = compute_link_header( | headers = compute_link_header( | ||||
rv, options) | rv, options) | ||||
self.assertEquals(headers, { | self.assertEquals(headers, { | ||||
'Link': '<foo>; rel="next",<bar>; rel="previous"', | 'Link': '<foo>; rel="next",<bar>; rel="previous"', | ||||
}) | }) | ||||
@istest | def test_compute_link_header_nothing_changed(self): | ||||
def compute_link_header_nothing_changed(self): | |||||
rv = {} | rv = {} | ||||
options = {} | options = {} | ||||
# when | # when | ||||
headers = compute_link_header( | headers = compute_link_header( | ||||
rv, options) | rv, options) | ||||
self.assertEquals(headers, {}) | self.assertEquals(headers, {}) | ||||
@istest | def test_compute_link_header_nothing_changed_2(self): | ||||
def compute_link_header_nothing_changed_2(self): | |||||
rv = {'headers': {}} | rv = {'headers': {}} | ||||
options = {} | options = {} | ||||
# when | # when | ||||
headers = compute_link_header( | headers = compute_link_header( | ||||
rv, options) | rv, options) | ||||
self.assertEquals(headers, {}) | self.assertEquals(headers, {}) | ||||
class SWHTransformProcessorTest(SWHWebTestCase): | class SWHTransformProcessorTest(SWHWebTestCase): | ||||
@istest | def test_transform_only_return_results_1(self): | ||||
def transform_only_return_results_1(self): | |||||
rv = {'results': {'some-key': 'some-value'}} | rv = {'results': {'some-key': 'some-value'}} | ||||
self.assertEquals(transform(rv), {'some-key': 'some-value'}) | self.assertEquals(transform(rv), {'some-key': 'some-value'}) | ||||
@istest | def test_transform_only_return_results_2(self): | ||||
def transform_only_return_results_2(self): | |||||
rv = {'headers': {'something': 'do changes'}, | rv = {'headers': {'something': 'do changes'}, | ||||
'results': {'some-key': 'some-value'}} | 'results': {'some-key': 'some-value'}} | ||||
self.assertEquals(transform(rv), {'some-key': 'some-value'}) | self.assertEquals(transform(rv), {'some-key': 'some-value'}) | ||||
@istest | def test_transform_do_remove_headers(self): | ||||
def transform_do_remove_headers(self): | |||||
rv = {'headers': {'something': 'do changes'}, | rv = {'headers': {'something': 'do changes'}, | ||||
'some-key': 'some-value'} | 'some-key': 'some-value'} | ||||
self.assertEquals(transform(rv), {'some-key': 'some-value'}) | self.assertEquals(transform(rv), {'some-key': 'some-value'}) | ||||
@istest | def test_transform_do_nothing(self): | ||||
def transform_do_nothing(self): | |||||
rv = {'some-key': 'some-value'} | rv = {'some-key': 'some-value'} | ||||
self.assertEquals(transform(rv), {'some-key': 'some-value'}) | self.assertEquals(transform(rv), {'some-key': 'some-value'}) | ||||
class RendererTestCase(SWHWebTestCase): | class RendererTestCase(SWHWebTestCase): | ||||
@patch('swh.web.api.apiresponse.json') | @patch('swh.web.api.apiresponse.json') | ||||
@patch('swh.web.api.apiresponse.filter_by_fields') | @patch('swh.web.api.apiresponse.filter_by_fields') | ||||
@patch('swh.web.api.apiresponse.shorten_path') | @patch('swh.web.api.apiresponse.shorten_path') | ||||
@istest | def test_swh_multi_response_mimetype(self, mock_shorten_path, | ||||
def swh_multi_response_mimetype(self, mock_shorten_path, | |||||
mock_filter, mock_json): | mock_filter, mock_json): | ||||
# given | # given | ||||
data = { | data = { | ||||
'data': [12, 34], | 'data': [12, 34], | ||||
'id': 'adc83b19e793491b1c6ea0fd8b46cd9f32e592fc' | 'id': 'adc83b19e793491b1c6ea0fd8b46cd9f32e592fc' | ||||
} | } | ||||
mock_filter.return_value = data | mock_filter.return_value = data | ||||
mock_shorten_path.return_value = 'my_short_path' | mock_shorten_path.return_value = 'my_short_path' | ||||
Show All 33 Lines | def test_swh_multi_response_mimetype(self, mock_shorten_path, | ||||
# then | # then | ||||
mock_filter.assert_called_with(request, data) | mock_filter.assert_called_with(request, data) | ||||
self.assertEqual(rv.data, expected_data) | self.assertEqual(rv.data, expected_data) | ||||
self.assertEqual(rv.status_code, 200) | self.assertEqual(rv.status_code, 200) | ||||
if mime_type == 'text/html': | if mime_type == 'text/html': | ||||
self.assertEqual(rv.template_name, 'api/apidoc.html') | self.assertEqual(rv.template_name, 'api/apidoc.html') | ||||
@istest | def test_swh_filter_renderer_do_nothing(self): | ||||
def swh_filter_renderer_do_nothing(self): | |||||
# given | # given | ||||
input_data = {'a': 'some-data'} | input_data = {'a': 'some-data'} | ||||
request = api_request_factory.get('/api/test/path/', data={}) | request = api_request_factory.get('/api/test/path/', data={}) | ||||
setattr(request, 'query_params', request.GET) | setattr(request, 'query_params', request.GET) | ||||
# when | # when | ||||
actual_data = filter_by_fields(request, input_data) | actual_data = filter_by_fields(request, input_data) | ||||
# then | # then | ||||
self.assertEquals(actual_data, input_data) | self.assertEquals(actual_data, input_data) | ||||
@patch('swh.web.api.apiresponse.utils.filter_field_keys') | @patch('swh.web.api.apiresponse.utils.filter_field_keys') | ||||
@istest | def test_swh_filter_renderer_do_filter(self, mock_ffk): | ||||
def swh_filter_renderer_do_filter(self, mock_ffk): | |||||
# given | # given | ||||
mock_ffk.return_value = {'a': 'some-data'} | mock_ffk.return_value = {'a': 'some-data'} | ||||
request = api_request_factory.get('/api/test/path/', | request = api_request_factory.get('/api/test/path/', | ||||
data={'fields': 'a,c'}) | data={'fields': 'a,c'}) | ||||
setattr(request, 'query_params', request.GET) | setattr(request, 'query_params', request.GET) | ||||
input_data = {'a': 'some-data', | input_data = {'a': 'some-data', | ||||
Show All 9 Lines |