Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/test_utils.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 | ||||
from unittest.mock import patch, call | from unittest.mock import patch, call | ||||
from nose.tools import istest, nottest | |||||
from swh.web.api import utils | from swh.web.api import utils | ||||
from swh.web.tests.testcase import SWHWebTestCase | from swh.web.tests.testcase import SWHWebTestCase | ||||
class UtilsTestCase(SWHWebTestCase): | class UtilsTestCase(SWHWebTestCase): | ||||
def setUp(self): | def setUp(self): | ||||
self.maxDiff = None | self.maxDiff = None | ||||
Show All 16 Lines | def setUp(self): | ||||
'blake2s256': ('791e07fcea240ade6dccd0a9309141673' | 'blake2s256': ('791e07fcea240ade6dccd0a9309141673' | ||||
'c31242cae9c237cf3855e151abc78e9'), | 'c31242cae9c237cf3855e151abc78e9'), | ||||
'sha1': 'dc2830a9e72f23c1dfebef4413003221baa5fb62', | 'sha1': 'dc2830a9e72f23c1dfebef4413003221baa5fb62', | ||||
'sha1_git': 'fe95a46679d128ff167b7c55df5d02356c5a1ae1', | 'sha1_git': 'fe95a46679d128ff167b7c55df5d02356c5a1ae1', | ||||
'sha256': ('b5c7fe0536f44ef60c8780b6065d30bca74a5cd06' | 'sha256': ('b5c7fe0536f44ef60c8780b6065d30bca74a5cd06' | ||||
'd78a4a71ba1ad064770f0c9') | 'd78a4a71ba1ad064770f0c9') | ||||
} | } | ||||
@istest | def test_filter_field_keys_dict_unknown_keys(self): | ||||
def filter_field_keys_dict_unknown_keys(self): | |||||
# when | # when | ||||
actual_res = utils.filter_field_keys( | actual_res = utils.filter_field_keys( | ||||
{'directory': 1, 'file': 2, 'link': 3}, | {'directory': 1, 'file': 2, 'link': 3}, | ||||
{'directory1', 'file2'}) | {'directory1', 'file2'}) | ||||
# then | # then | ||||
self.assertEqual(actual_res, {}) | self.assertEqual(actual_res, {}) | ||||
@istest | def test_filter_field_keys_dict(self): | ||||
def filter_field_keys_dict(self): | |||||
# when | # when | ||||
actual_res = utils.filter_field_keys( | actual_res = utils.filter_field_keys( | ||||
{'directory': 1, 'file': 2, 'link': 3}, | {'directory': 1, 'file': 2, 'link': 3}, | ||||
{'directory', 'link'}) | {'directory', 'link'}) | ||||
# then | # then | ||||
self.assertEqual(actual_res, {'directory': 1, 'link': 3}) | self.assertEqual(actual_res, {'directory': 1, 'link': 3}) | ||||
@istest | def test_filter_field_keys_list_unknown_keys(self): | ||||
def filter_field_keys_list_unknown_keys(self): | |||||
# when | # when | ||||
actual_res = utils.filter_field_keys( | actual_res = utils.filter_field_keys( | ||||
[{'directory': 1, 'file': 2, 'link': 3}, | [{'directory': 1, 'file': 2, 'link': 3}, | ||||
{'1': 1, '2': 2, 'link': 3}], | {'1': 1, '2': 2, 'link': 3}], | ||||
{'d'}) | {'d'}) | ||||
# then | # then | ||||
self.assertEqual(actual_res, [{}, {}]) | self.assertEqual(actual_res, [{}, {}]) | ||||
@istest | def test_filter_field_keys_map(self): | ||||
def filter_field_keys_map(self): | |||||
# when | # when | ||||
actual_res = utils.filter_field_keys( | actual_res = utils.filter_field_keys( | ||||
map(lambda x: {'i': x['i']+1, 'j': x['j']}, | map(lambda x: {'i': x['i']+1, 'j': x['j']}, | ||||
[{'i': 1, 'j': None}, | [{'i': 1, 'j': None}, | ||||
{'i': 2, 'j': None}, | {'i': 2, 'j': None}, | ||||
{'i': 3, 'j': None}]), | {'i': 3, 'j': None}]), | ||||
{'i'}) | {'i'}) | ||||
# then | # then | ||||
self.assertEqual(list(actual_res), [{'i': 2}, {'i': 3}, {'i': 4}]) | self.assertEqual(list(actual_res), [{'i': 2}, {'i': 3}, {'i': 4}]) | ||||
@istest | def test_filter_field_keys_list(self): | ||||
def filter_field_keys_list(self): | |||||
# when | # when | ||||
actual_res = utils.filter_field_keys( | actual_res = utils.filter_field_keys( | ||||
[{'directory': 1, 'file': 2, 'link': 3}, | [{'directory': 1, 'file': 2, 'link': 3}, | ||||
{'dir': 1, 'fil': 2, 'lin': 3}], | {'dir': 1, 'fil': 2, 'lin': 3}], | ||||
{'directory', 'dir'}) | {'directory', 'dir'}) | ||||
# then | # then | ||||
self.assertEqual(actual_res, [{'directory': 1}, {'dir': 1}]) | self.assertEqual(actual_res, [{'directory': 1}, {'dir': 1}]) | ||||
@istest | def test_filter_field_keys_other(self): | ||||
def filter_field_keys_other(self): | |||||
# given | # given | ||||
input_set = {1, 2} | input_set = {1, 2} | ||||
# when | # when | ||||
actual_res = utils.filter_field_keys(input_set, {'a', '1'}) | actual_res = utils.filter_field_keys(input_set, {'a', '1'}) | ||||
# then | # then | ||||
self.assertEqual(actual_res, input_set) | self.assertEqual(actual_res, input_set) | ||||
@istest | def test_person_to_string(self): | ||||
def person_to_string(self): | |||||
self.assertEqual(utils.person_to_string(dict(name='raboof', | self.assertEqual(utils.person_to_string(dict(name='raboof', | ||||
email='foo@bar')), | email='foo@bar')), | ||||
'raboof <foo@bar>') | 'raboof <foo@bar>') | ||||
@istest | def test_enrich_release_0(self): | ||||
def enrich_release_0(self): | |||||
# when | # when | ||||
actual_release = utils.enrich_release({}) | actual_release = utils.enrich_release({}) | ||||
# then | # then | ||||
self.assertEqual(actual_release, {}) | self.assertEqual(actual_release, {}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_release_1(self, mock_django_reverse): | ||||
def enrich_release_1(self, mock_django_reverse): | |||||
# given | # given | ||||
def reverse_test_context(view_name, kwargs): | def reverse_test_context(view_name, kwargs): | ||||
if view_name == 'content': | if view_name == 'content': | ||||
id = kwargs['q'] | id = kwargs['q'] | ||||
return '/api/1/content/%s/' % id | return '/api/1/content/%s/' % id | ||||
elif view_name == 'person': | elif view_name == 'person': | ||||
id = kwargs['person_id'] | id = kwargs['person_id'] | ||||
Show All 29 Lines | def test_enrich_release_1(self, mock_django_reverse): | ||||
}) | }) | ||||
mock_django_reverse.assert_has_calls([ | mock_django_reverse.assert_has_calls([ | ||||
call('content', kwargs={'q': 'sha1_git:123'}), | call('content', kwargs={'q': 'sha1_git:123'}), | ||||
call('person', kwargs={'person_id': 100}) | call('person', kwargs={'person_id': 100}) | ||||
]) | ]) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_release_2(self, mock_django_reverse): | ||||
def enrich_release_2(self, mock_django_reverse): | |||||
# given | # given | ||||
mock_django_reverse.return_value = '/api/1/dir/23/' | mock_django_reverse.return_value = '/api/1/dir/23/' | ||||
# when | # when | ||||
actual_release = utils.enrich_release({'target': '23', | actual_release = utils.enrich_release({'target': '23', | ||||
'target_type': 'directory'}) | 'target_type': 'directory'}) | ||||
# then | # then | ||||
self.assertEqual(actual_release, { | self.assertEqual(actual_release, { | ||||
'target': '23', | 'target': '23', | ||||
'target_type': 'directory', | 'target_type': 'directory', | ||||
'target_url': '/api/1/dir/23/' | 'target_url': '/api/1/dir/23/' | ||||
}) | }) | ||||
mock_django_reverse.assert_called_once_with('directory', | mock_django_reverse.assert_called_once_with('directory', | ||||
kwargs={'sha1_git': '23'}) | kwargs={'sha1_git': '23'}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_release_3(self, mock_django_reverse): | ||||
def enrich_release_3(self, mock_django_reverse): | |||||
# given | # given | ||||
mock_django_reverse.return_value = '/api/1/rev/3/' | mock_django_reverse.return_value = '/api/1/rev/3/' | ||||
# when | # when | ||||
actual_release = utils.enrich_release({'target': '3', | actual_release = utils.enrich_release({'target': '3', | ||||
'target_type': 'revision'}) | 'target_type': 'revision'}) | ||||
# then | # then | ||||
self.assertEqual(actual_release, { | self.assertEqual(actual_release, { | ||||
'target': '3', | 'target': '3', | ||||
'target_type': 'revision', | 'target_type': 'revision', | ||||
'target_url': '/api/1/rev/3/' | 'target_url': '/api/1/rev/3/' | ||||
}) | }) | ||||
mock_django_reverse.assert_called_once_with('revision', | mock_django_reverse.assert_called_once_with('revision', | ||||
kwargs={'sha1_git': '3'}) | kwargs={'sha1_git': '3'}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_release_4(self, mock_django_reverse): | ||||
def enrich_release_4(self, mock_django_reverse): | |||||
# given | # given | ||||
mock_django_reverse.return_value = '/api/1/rev/4/' | mock_django_reverse.return_value = '/api/1/rev/4/' | ||||
# when | # when | ||||
actual_release = utils.enrich_release({'target': '4', | actual_release = utils.enrich_release({'target': '4', | ||||
'target_type': 'release'}) | 'target_type': 'release'}) | ||||
# then | # then | ||||
self.assertEqual(actual_release, { | self.assertEqual(actual_release, { | ||||
'target': '4', | 'target': '4', | ||||
'target_type': 'release', | 'target_type': 'release', | ||||
'target_url': '/api/1/rev/4/' | 'target_url': '/api/1/rev/4/' | ||||
}) | }) | ||||
mock_django_reverse.assert_called_once_with('release', | mock_django_reverse.assert_called_once_with('release', | ||||
kwargs={'sha1_git': '4'}) | kwargs={'sha1_git': '4'}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_directory_no_type(self, mock_django_reverse): | ||||
def enrich_directory_no_type(self, mock_django_reverse): | |||||
# when/then | # when/then | ||||
self.assertEqual(utils.enrich_directory({'id': 'dir-id'}), | self.assertEqual(utils.enrich_directory({'id': 'dir-id'}), | ||||
{'id': 'dir-id'}) | {'id': 'dir-id'}) | ||||
# given | # given | ||||
mock_django_reverse.return_value = '/api/content/sha1_git:123/' | mock_django_reverse.return_value = '/api/content/sha1_git:123/' | ||||
# when | # when | ||||
Show All 10 Lines | def test_enrich_directory_no_type(self, mock_django_reverse): | ||||
'target': '123', | 'target': '123', | ||||
'target_url': '/api/content/sha1_git:123/', | 'target_url': '/api/content/sha1_git:123/', | ||||
}) | }) | ||||
mock_django_reverse.assert_called_once_with( | mock_django_reverse.assert_called_once_with( | ||||
'content', kwargs={'q': 'sha1_git:123'}) | 'content', kwargs={'q': 'sha1_git:123'}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_directory_with_context_and_type_file( | ||||
def enrich_directory_with_context_and_type_file(self, mock_django_reverse): | self, mock_django_reverse, | ||||
): | |||||
# given | # given | ||||
mock_django_reverse.return_value = '/api/content/sha1_git:123/' | mock_django_reverse.return_value = '/api/content/sha1_git:123/' | ||||
# when | # when | ||||
actual_directory = utils.enrich_directory({ | actual_directory = utils.enrich_directory({ | ||||
'id': 'dir-id', | 'id': 'dir-id', | ||||
'type': 'file', | 'type': 'file', | ||||
'name': 'hy', | 'name': 'hy', | ||||
Show All 10 Lines | ): | ||||
'file_url': '/api/revision/revsha1/directory' | 'file_url': '/api/revision/revsha1/directory' | ||||
'/prefix/path/hy/' | '/prefix/path/hy/' | ||||
}) | }) | ||||
mock_django_reverse.assert_called_once_with( | mock_django_reverse.assert_called_once_with( | ||||
'content', kwargs={'q': 'sha1_git:789'}) | 'content', kwargs={'q': 'sha1_git:789'}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_directory_with_context_and_type_dir( | ||||
def enrich_directory_with_context_and_type_dir(self, mock_django_reverse): | self, mock_django_reverse, | ||||
): | |||||
# given | # given | ||||
mock_django_reverse.return_value = '/api/directory/456/' | mock_django_reverse.return_value = '/api/directory/456/' | ||||
# when | # when | ||||
actual_directory = utils.enrich_directory({ | actual_directory = utils.enrich_directory({ | ||||
'id': 'dir-id', | 'id': 'dir-id', | ||||
'type': 'dir', | 'type': 'dir', | ||||
'name': 'emacs-42', | 'name': 'emacs-42', | ||||
Show All 11 Lines | ): | ||||
'target_url': '/api/directory/456/', | 'target_url': '/api/directory/456/', | ||||
'dir_url': '/api/revision/origin/2/directory' | 'dir_url': '/api/revision/origin/2/directory' | ||||
'/some/prefix/path/emacs-42/' | '/some/prefix/path/emacs-42/' | ||||
}) | }) | ||||
mock_django_reverse.assert_called_once_with('directory', | mock_django_reverse.assert_called_once_with('directory', | ||||
kwargs={'sha1_git': '456'}) | kwargs={'sha1_git': '456'}) | ||||
@istest | def test_enrich_content_without_hashes(self): | ||||
def enrich_content_without_hashes(self): | |||||
# when/then | # when/then | ||||
self.assertEqual(utils.enrich_content({'id': '123'}), | self.assertEqual(utils.enrich_content({'id': '123'}), | ||||
{'id': '123'}) | {'id': '123'}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_content_with_hashes(self, mock_django_reverse): | ||||
def enrich_content_with_hashes(self, mock_django_reverse): | |||||
for algo, hash in self.sample_content_hashes.items(): | for algo, hash in self.sample_content_hashes.items(): | ||||
query_string = '%s:%s' % (algo, hash) | query_string = '%s:%s' % (algo, hash) | ||||
# given | # given | ||||
mock_django_reverse.side_effect = [ | mock_django_reverse.side_effect = [ | ||||
'/api/content/%s/raw/' % query_string, | '/api/content/%s/raw/' % query_string, | ||||
Show All 27 Lines | def test_enrich_content_with_hashes(self, mock_django_reverse): | ||||
call('content-filetype', kwargs={'q': query_string}), | call('content-filetype', kwargs={'q': query_string}), | ||||
call('content-language', kwargs={'q': query_string}), | call('content-language', kwargs={'q': query_string}), | ||||
call('content-license', kwargs={'q': query_string}), | call('content-license', kwargs={'q': query_string}), | ||||
]) | ]) | ||||
mock_django_reverse.reset() | mock_django_reverse.reset() | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_content_with_hashes_and_top_level_url(self, | ||||
def enrich_content_with_hashes_and_top_level_url(self, | |||||
mock_django_reverse): | mock_django_reverse): | ||||
for algo, hash in self.sample_content_hashes.items(): | for algo, hash in self.sample_content_hashes.items(): | ||||
query_string = '%s:%s' % (algo, hash) | query_string = '%s:%s' % (algo, hash) | ||||
# given | # given | ||||
mock_django_reverse.side_effect = [ | mock_django_reverse.side_effect = [ | ||||
'/api/content/%s/' % query_string, | '/api/content/%s/' % query_string, | ||||
Show All 30 Lines | def test_enrich_content_with_hashes_and_top_level_url(self, | ||||
call('content-raw', kwargs={'q': query_string}), | call('content-raw', kwargs={'q': query_string}), | ||||
call('content-filetype', kwargs={'q': query_string}), | call('content-filetype', kwargs={'q': query_string}), | ||||
call('content-language', kwargs={'q': query_string}), | call('content-language', kwargs={'q': query_string}), | ||||
call('content-license', kwargs={'q': query_string}), | call('content-license', kwargs={'q': query_string}), | ||||
]) | ]) | ||||
mock_django_reverse.reset() | mock_django_reverse.reset() | ||||
@istest | def test_enrich_entity_identity(self): | ||||
def enrich_entity_identity(self): | |||||
# when/then | # when/then | ||||
self.assertEqual(utils.enrich_content({'id': '123'}), | self.assertEqual(utils.enrich_content({'id': '123'}), | ||||
{'id': '123'}) | {'id': '123'}) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_entity_with_sha1(self, mock_django_reverse): | ||||
def enrich_entity_with_sha1(self, mock_django_reverse): | |||||
# given | # given | ||||
def reverse_test(view_name, kwargs): | def reverse_test(view_name, kwargs): | ||||
return '/api/entity/' + kwargs['uuid'] + '/' | return '/api/entity/' + kwargs['uuid'] + '/' | ||||
mock_django_reverse.side_effect = reverse_test | mock_django_reverse.side_effect = reverse_test | ||||
# when | # when | ||||
actual_entity = utils.enrich_entity({ | actual_entity = utils.enrich_entity({ | ||||
Show All 10 Lines | def test_enrich_entity_with_sha1(self, mock_django_reverse): | ||||
'parent_url': '/api/entity/uuid-parent/', | 'parent_url': '/api/entity/uuid-parent/', | ||||
'name': 'something', | 'name': 'something', | ||||
}) | }) | ||||
mock_django_reverse.assert_has_calls( | mock_django_reverse.assert_has_calls( | ||||
[call('entity', kwargs={'uuid': 'uuid-1'}), | [call('entity', kwargs={'uuid': 'uuid-1'}), | ||||
call('entity', kwargs={'uuid': 'uuid-parent'})]) | call('entity', kwargs={'uuid': 'uuid-parent'})]) | ||||
@nottest | |||||
def _reverse_context_test(self, view_name, kwargs): | def _reverse_context_test(self, view_name, kwargs): | ||||
if view_name == 'revision': | if view_name == 'revision': | ||||
return '/api/revision/%s/' % kwargs['sha1_git'] | return '/api/revision/%s/' % kwargs['sha1_git'] | ||||
elif view_name == 'revision-context': | elif view_name == 'revision-context': | ||||
return '/api/revision/%s/prev/%s/' % (kwargs['sha1_git'], kwargs['context']) # noqa | return '/api/revision/%s/prev/%s/' % (kwargs['sha1_git'], kwargs['context']) # noqa | ||||
elif view_name == 'revision-log': | elif view_name == 'revision-log': | ||||
if 'prev_sha1s' in kwargs: | if 'prev_sha1s' in kwargs: | ||||
return '/api/revision/%s/prev/%s/log/' % (kwargs['sha1_git'], kwargs['prev_sha1s']) # noqa | return '/api/revision/%s/prev/%s/log/' % (kwargs['sha1_git'], kwargs['prev_sha1s']) # noqa | ||||
else: | else: | ||||
return '/api/revision/%s/log/' % kwargs['sha1_git'] | return '/api/revision/%s/log/' % kwargs['sha1_git'] | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_revision_without_children_or_parent( | ||||
def enrich_revision_without_children_or_parent(self, mock_django_reverse): | self, mock_django_reverse, | ||||
): | |||||
# given | # given | ||||
def reverse_test(view_name, kwargs): | def reverse_test(view_name, kwargs): | ||||
if view_name == 'revision': | if view_name == 'revision': | ||||
return '/api/revision/' + kwargs['sha1_git'] + '/' | return '/api/revision/' + kwargs['sha1_git'] + '/' | ||||
elif view_name == 'revision-log': | elif view_name == 'revision-log': | ||||
return '/api/revision/' + kwargs['sha1_git'] + '/log/' | return '/api/revision/' + kwargs['sha1_git'] + '/log/' | ||||
elif view_name == 'directory': | elif view_name == 'directory': | ||||
return '/api/directory/' + kwargs['sha1_git'] + '/' | return '/api/directory/' + kwargs['sha1_git'] + '/' | ||||
Show All 28 Lines | ): | ||||
mock_django_reverse.assert_has_calls( | mock_django_reverse.assert_has_calls( | ||||
[call('revision', kwargs={'sha1_git': 'rev-id'}), | [call('revision', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id'}), | call('revision-log', kwargs={'sha1_git': 'rev-id'}), | ||||
call('person', kwargs={'person_id': '1'}), | call('person', kwargs={'person_id': '1'}), | ||||
call('person', kwargs={'person_id': '2'}), | call('person', kwargs={'person_id': '2'}), | ||||
call('directory', kwargs={'sha1_git': '123'})]) | call('directory', kwargs={'sha1_git': '123'})]) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_revision_with_children_and_parent_no_dir( | ||||
def enrich_revision_with_children_and_parent_no_dir(self, | self, mock_django_reverse, | ||||
mock_django_reverse): | ): | ||||
# given | # given | ||||
mock_django_reverse.side_effect = self._reverse_context_test | mock_django_reverse.side_effect = self._reverse_context_test | ||||
# when | # when | ||||
actual_revision = utils.enrich_revision({ | actual_revision = utils.enrich_revision({ | ||||
'id': 'rev-id', | 'id': 'rev-id', | ||||
'parents': ['123'], | 'parents': ['123'], | ||||
'children': ['456'], | 'children': ['456'], | ||||
Show All 18 Lines | ): | ||||
call('revision', kwargs={'sha1_git': 'rev-id'}), | call('revision', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id'}), | call('revision-log', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id', | call('revision-log', kwargs={'sha1_git': 'rev-id', | ||||
'prev_sha1s': 'prev-rev'}), | 'prev_sha1s': 'prev-rev'}), | ||||
call('revision', kwargs={'sha1_git': '123'}), | call('revision', kwargs={'sha1_git': '123'}), | ||||
call('revision', kwargs={'sha1_git': '456'})]) | call('revision', kwargs={'sha1_git': '456'})]) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_revision_no_context(self, mock_django_reverse): | ||||
def enrich_revision_no_context(self, mock_django_reverse): | |||||
# given | # given | ||||
mock_django_reverse.side_effect = self._reverse_context_test | mock_django_reverse.side_effect = self._reverse_context_test | ||||
# when | # when | ||||
actual_revision = utils.enrich_revision({ | actual_revision = utils.enrich_revision({ | ||||
'id': 'rev-id', | 'id': 'rev-id', | ||||
'parents': ['123'], | 'parents': ['123'], | ||||
'children': ['456'], | 'children': ['456'], | ||||
Show All 13 Lines | def test_enrich_revision_no_context(self, mock_django_reverse): | ||||
mock_django_reverse.assert_has_calls( | mock_django_reverse.assert_has_calls( | ||||
[call('revision', kwargs={'sha1_git': 'rev-id'}), | [call('revision', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id'}), | call('revision-log', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision', kwargs={'sha1_git': '123'}), | call('revision', kwargs={'sha1_git': '123'}), | ||||
call('revision', kwargs={'sha1_git': '456'})]) | call('revision', kwargs={'sha1_git': '456'})]) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_revision_context_empty_prev_list( | ||||
def enrich_revision_context_empty_prev_list(self, mock_django_reverse): | self, mock_django_reverse, | ||||
): | |||||
# given | # given | ||||
mock_django_reverse.side_effect = self._reverse_context_test | mock_django_reverse.side_effect = self._reverse_context_test | ||||
# when | # when | ||||
expected_revision = { | expected_revision = { | ||||
'id': 'rev-id', | 'id': 'rev-id', | ||||
'url': '/api/revision/rev-id/', | 'url': '/api/revision/rev-id/', | ||||
'history_url': '/api/revision/rev-id/log/', | 'history_url': '/api/revision/rev-id/log/', | ||||
Show All 18 Lines | ): | ||||
call('revision', kwargs={'sha1_git': 'rev-id'}), | call('revision', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id'}), | call('revision-log', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id', | call('revision-log', kwargs={'sha1_git': 'rev-id', | ||||
'prev_sha1s': 'prev-rev'}), | 'prev_sha1s': 'prev-rev'}), | ||||
call('revision', kwargs={'sha1_git': '123'}), | call('revision', kwargs={'sha1_git': '123'}), | ||||
call('revision', kwargs={'sha1_git': '456'})]) | call('revision', kwargs={'sha1_git': '456'})]) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_revision_context_some_prev_list(self, mock_django_reverse): | ||||
def enrich_revision_context_some_prev_list(self, mock_django_reverse): | |||||
# given | # given | ||||
mock_django_reverse.side_effect = self._reverse_context_test | mock_django_reverse.side_effect = self._reverse_context_test | ||||
# when | # when | ||||
expected_revision = { | expected_revision = { | ||||
'id': 'rev-id', | 'id': 'rev-id', | ||||
'url': '/api/revision/rev-id/', | 'url': '/api/revision/rev-id/', | ||||
'history_url': '/api/revision/rev-id/log/', | 'history_url': '/api/revision/rev-id/log/', | ||||
Show All 17 Lines | def test_enrich_revision_context_some_prev_list(self, mock_django_reverse): | ||||
'sha1_git': 'prev0-rev'}), | 'sha1_git': 'prev0-rev'}), | ||||
call('revision', kwargs={'sha1_git': 'rev-id'}), | call('revision', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id'}), | call('revision-log', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'prev_sha1s': 'prev1-rev/prev0-rev', | call('revision-log', kwargs={'prev_sha1s': 'prev1-rev/prev0-rev', | ||||
'sha1_git': 'rev-id'}), | 'sha1_git': 'rev-id'}), | ||||
call('revision', kwargs={'sha1_git': '123'}), | call('revision', kwargs={'sha1_git': '123'}), | ||||
call('revision', kwargs={'sha1_git': '456'})]) | call('revision', kwargs={'sha1_git': '456'})]) | ||||
@nottest | |||||
def _reverse_rev_message_test(self, view_name, kwargs): | def _reverse_rev_message_test(self, view_name, kwargs): | ||||
if view_name == 'revision': | if view_name == 'revision': | ||||
return '/api/revision/%s/' % kwargs['sha1_git'] | return '/api/revision/%s/' % kwargs['sha1_git'] | ||||
elif view_name == 'revision-log': | elif view_name == 'revision-log': | ||||
if 'prev_sha1s' in kwargs and kwargs['prev_sha1s'] is not None: | if 'prev_sha1s' in kwargs and kwargs['prev_sha1s'] is not None: | ||||
return '/api/revision/%s/prev/%s/log/' % (kwargs['sha1_git'], kwargs['prev_sha1s']) # noqa | return '/api/revision/%s/prev/%s/log/' % (kwargs['sha1_git'], kwargs['prev_sha1s']) # noqa | ||||
else: | else: | ||||
return '/api/revision/%s/log/' % kwargs['sha1_git'] | return '/api/revision/%s/log/' % kwargs['sha1_git'] | ||||
elif view_name == 'revision-raw-message': | elif view_name == 'revision-raw-message': | ||||
return '/api/revision/' + kwargs['sha1_git'] + '/raw/' | return '/api/revision/' + kwargs['sha1_git'] + '/raw/' | ||||
else: | else: | ||||
return '/api/revision/%s/prev/%s/' % (kwargs['sha1_git'], kwargs['context']) # noqa | return '/api/revision/%s/prev/%s/' % (kwargs['sha1_git'], kwargs['context']) # noqa | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_revision_with_no_message(self, mock_django_reverse): | ||||
def enrich_revision_with_no_message(self, mock_django_reverse): | |||||
# given | # given | ||||
mock_django_reverse.side_effect = self._reverse_rev_message_test | mock_django_reverse.side_effect = self._reverse_rev_message_test | ||||
# when | # when | ||||
expected_revision = { | expected_revision = { | ||||
'id': 'rev-id', | 'id': 'rev-id', | ||||
'url': '/api/revision/rev-id/', | 'url': '/api/revision/rev-id/', | ||||
'history_url': '/api/revision/rev-id/log/', | 'history_url': '/api/revision/rev-id/log/', | ||||
Show All 22 Lines | def test_enrich_revision_with_no_message(self, mock_django_reverse): | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id'}), | call('revision-log', kwargs={'sha1_git': 'rev-id'}), | ||||
call('revision-log', kwargs={'sha1_git': 'rev-id', | call('revision-log', kwargs={'sha1_git': 'rev-id', | ||||
'prev_sha1s': 'prev-rev'}), | 'prev_sha1s': 'prev-rev'}), | ||||
call('revision', kwargs={'sha1_git': '123'}), | call('revision', kwargs={'sha1_git': '123'}), | ||||
call('revision', kwargs={'sha1_git': '456'})] | call('revision', kwargs={'sha1_git': '456'})] | ||||
) | ) | ||||
@patch('swh.web.api.utils.reverse') | @patch('swh.web.api.utils.reverse') | ||||
@istest | def test_enrich_revision_with_invalid_message(self, mock_django_reverse): | ||||
def enrich_revision_with_invalid_message(self, mock_django_reverse): | |||||
# given | # given | ||||
mock_django_reverse.side_effect = self._reverse_rev_message_test | mock_django_reverse.side_effect = self._reverse_rev_message_test | ||||
# when | # when | ||||
actual_revision = utils.enrich_revision({ | actual_revision = utils.enrich_revision({ | ||||
'id': 'rev-id', | 'id': 'rev-id', | ||||
'message': None, | 'message': None, | ||||
'message_decoding_failed': True, | 'message_decoding_failed': True, | ||||
Show All 31 Lines |