diff --git a/swh/web/tests/browse/test_utils.py b/swh/web/tests/browse/test_utils.py
index af1da9cd..5f4db708 100644
--- a/swh/web/tests/browse/test_utils.py
+++ b/swh/web/tests/browse/test_utils.py
@@ -1,169 +1,85 @@
# Copyright (C) 2017-2018 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU Affero General Public License version 3, or any later version
# See top-level LICENSE file for more information
-# flake8: noqa
-
-from unittest.mock import patch
+from hypothesis import given
from swh.web.browse import utils
-from swh.web.common.exc import NotFoundExc
-from swh.web.common.utils import reverse
+from swh.web.common.utils import reverse, format_utc_iso_date
+from swh.web.tests.strategies import origin_with_multiple_visits
from swh.web.tests.testcase import WebTestCase
-from .views.data.revision_test_data import revision_history_log_test
-
class SwhBrowseUtilsTestCase(WebTestCase):
def test_get_mimetype_and_encoding_for_content(self):
text = b'Hello world!'
self.assertEqual(utils.get_mimetype_and_encoding_for_content(text),
('text/plain', 'us-ascii'))
- @patch('swh.web.browse.utils.service')
- @patch('swh.web.browse.utils.get_origin_visit')
- def test_get_origin_visit_snapshot(self, mock_get_origin_visit,
- mock_service):
-
- mock_get_origin_visit.return_value = \
- {'status': 'full',
- 'date': '2015-08-04T22:26:14.804009+00:00',
- 'visit': 1,
- 'origin': 1,
- 'snapshot': '584b2fe3ce6218a96892e73bd76c2966bbc2a797'}
-
- mock_service.lookup_snapshot.return_value = \
- {'branches': {
- 'HEAD': {
- 'target': '9fbd21adbac36be869514e82e2e98505dc47219c',
- 'target_type': 'revision',
- 'target_url': '/api/1/revision/9fbd21adbac36be869514e82e2e98505dc47219c/'
- },
- 'refs/heads/master': {
- 'target': '9fbd21adbac36be869514e82e2e98505dc47219c',
- 'target_type': 'revision',
- 'target_url': '/api/1/revision/9fbd21adbac36be869514e82e2e98505dc47219c/'
- },
- 'refs/tags/0.10.0': {
- 'target': '7045404f3d1c54e6473c71bbb716529fbad4be24',
- 'target_type': 'release',
- 'target_url': '/api/1/release/7045404f3d1c54e6473c71bbb716529fbad4be24/'
- },
- 'refs/tags/0.10.1': {
- 'target': 'c893f4549c367e68288b0eb74595050410aa0de7',
- 'target_type': 'release',
- 'target_url': '/api/1/release/c893f4549c367e68288b0eb74595050410aa0de7/'
- }
- },
- 'id': '584b2fe3ce6218a96892e73bd76c2966bbc2a797'}
-
- mock_service.lookup_release_multiple.return_value = \
- [{'name': '0.10.0',
- 'message': '0.10: The "Oh fuck it\'s PyCon" release\n',
- 'id': '7045404f3d1c54e6473c71bbb716529fbad4be24',
- 'date': '2014-04-10T23:01:28-04:00',
- 'target_type': 'revision',
- 'target': '6072557b6c10cd9a21145781e26ad1f978ed14b9'},
- {'name': '0.10.1',
- 'message': 'Tagging 0.10.1\n',
- 'id': 'c893f4549c367e68288b0eb74595050410aa0de7',
- 'date': '2014-10-10T09:45:52-04:00',
- 'target_type': 'revision',
- 'target': 'ecc003b43433e5b46511157598e4857a761007bf'}]
-
- mock_service.lookup_revision_multiple.return_value = \
- [{'date': '2015-08-04T13:16:54+03:00',
- 'directory': '828da2b80e41aa958b2c98526f4a1d2cc7d298b7',
- 'id': '9fbd21adbac36be869514e82e2e98505dc47219c',
- 'message': 'Merge pull request #678 from algernon'},
- {'date': '2014-04-10T23:01:11-04:00',
- 'directory': '2df4cd84ecc65b50b1d5318d3727e02a39b8a4cf',
- 'id': '6072557b6c10cd9a21145781e26ad1f978ed14b9',
- 'message': '0.10: The "Oh fuck it\'s PyCon" release\n'},
- {'date': '2014-10-10T09:45:23-04:00',
- 'directory': '28ba64f97ef709e54838ae482c2da2619a74a0bd',
- 'id': 'ecc003b43433e5b46511157598e4857a761007bf',
- 'message': '0.10.1\n'}]
-
- expected_result = (
- [{'name': 'HEAD',
- 'message': 'Merge pull request #678 from algernon',
- 'date': '04 August 2015, 10:16 UTC',
- 'revision': '9fbd21adbac36be869514e82e2e98505dc47219c',
- 'directory': '828da2b80e41aa958b2c98526f4a1d2cc7d298b7'},
- {'name': 'refs/heads/master',
- 'message': 'Merge pull request #678 from algernon',
- 'date': '04 August 2015, 10:16 UTC',
- 'revision': '9fbd21adbac36be869514e82e2e98505dc47219c',
- 'directory': '828da2b80e41aa958b2c98526f4a1d2cc7d298b7'}],
- [{'name': '0.10.0',
- 'branch_name': 'refs/tags/0.10.0',
- 'id': '7045404f3d1c54e6473c71bbb716529fbad4be24',
- 'message': '0.10: The "Oh fuck it\'s PyCon" release\n',
- 'date': '11 April 2014, 03:01 UTC',
- 'target_type': 'revision',
- 'target': '6072557b6c10cd9a21145781e26ad1f978ed14b9',
- 'directory': '2df4cd84ecc65b50b1d5318d3727e02a39b8a4cf'},
- {'name': '0.10.1',
- 'branch_name': 'refs/tags/0.10.1',
- 'id': 'c893f4549c367e68288b0eb74595050410aa0de7',
- 'message': 'Tagging 0.10.1\n',
- 'date': '10 October 2014, 13:45 UTC',
- 'target_type': 'revision',
- 'target': 'ecc003b43433e5b46511157598e4857a761007bf',
- 'directory': '28ba64f97ef709e54838ae482c2da2619a74a0bd'}]
- )
-
- origin_info = {
- 'id': 1,
- 'type': 'git',
- 'url': 'https://github.com/hylang/hy'
- }
-
- origin_visit_branches = \
- utils.get_origin_visit_snapshot(origin_info, visit_id=1)
-
- lookup_release_calls = mock_service.lookup_release_multiple.call_args_list
- self.assertEqual(len(lookup_release_calls), 1)
-
- # Check that we looked up the two expected releases
- self.assertCountEqual(set(lookup_release_calls[0][0][0]), {
- '7045404f3d1c54e6473c71bbb716529fbad4be24',
- 'c893f4549c367e68288b0eb74595050410aa0de7',
- })
-
- lookup_revision_calls = mock_service.lookup_revision_multiple.call_args_list
- self.assertEqual(len(lookup_revision_calls), 1)
-
- # Check that we looked up the three expected revisions
- self.assertCountEqual(set(lookup_revision_calls[0][0][0]), {
- '9fbd21adbac36be869514e82e2e98505dc47219c',
- '6072557b6c10cd9a21145781e26ad1f978ed14b9',
- 'ecc003b43433e5b46511157598e4857a761007bf',
- })
-
- self.assertEqual(origin_visit_branches, expected_result)
+ @given(origin_with_multiple_visits())
+ def test_get_origin_visit_snapshot(self, origin):
+
+ visits = self.origin_visit_get(origin['id'])
+
+ for visit in visits:
+
+ snapshot = self.snapshot_get(visit['snapshot'])
+ branches = []
+ releases = []
+
+ for branch in sorted(snapshot['branches'].keys()):
+ branch_data = snapshot['branches'][branch]
+ if branch_data['target_type'] == 'revision':
+ rev_data = self.revision_get(branch_data['target'])
+ branches.append({
+ 'name': branch,
+ 'revision': branch_data['target'],
+ 'directory': rev_data['directory'],
+ 'date': format_utc_iso_date(rev_data['date']),
+ 'message': rev_data['message']
+ })
+ elif branch_data['target_type'] == 'release':
+ rel_data = self.release_get(branch_data['target'])
+ rev_data = self.revision_get(rel_data['target'])
+ releases.append({
+ 'name': rel_data['name'],
+ 'branch_name': branch,
+ 'date': format_utc_iso_date(rel_data['date']),
+ 'id': rel_data['id'],
+ 'message': rel_data['message'],
+ 'target_type': rel_data['target_type'],
+ 'target': rel_data['target'],
+ 'directory': rev_data['directory']
+ })
+
+ origin_visit_branches = utils.get_origin_visit_snapshot(
+ origin, visit_id=visit['visit'])
+
+ self.assertEqual(origin_visit_branches, (branches, releases))
def test_gen_link(self):
- self.assertEqual(utils.gen_link('https://www.softwareheritage.org/', 'swh'),
- 'swh')
+ self.assertEqual(
+ utils.gen_link('https://www.softwareheritage.org/', 'swh'),
+ 'swh')
def test_gen_person_link(self):
person_id = 8221896
person_name = 'Antoine Lambert'
- person_url = reverse('browse-person', url_args={'person_id': person_id})
+ person_url = reverse('browse-person',
+ url_args={'person_id': person_id})
self.assertEqual(utils.gen_person_link(person_id, person_name),
'%s' % (person_url, person_name))
def test_gen_revision_link(self):
revision_id = '28a0bc4120d38a394499382ba21d6965a67a3703'
revision_url = reverse('browse-revision',
url_args={'sha1_git': revision_id})
self.assertEqual(utils.gen_revision_link(revision_id),
'%s' % (revision_url, revision_id))
- self.assertEqual(utils.gen_revision_link(revision_id, shorten_id=True),
- '%s' % (revision_url, revision_id[:7]))
+ self.assertEqual(
+ utils.gen_revision_link(revision_id, shorten_id=True),
+ '%s' % (revision_url, revision_id[:7]))