Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/browse/views/test_revision.py
# Copyright (C) 2017-2018 The Software Heritage developers | # Copyright (C) 2017-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 | ||||
# flake8: noqa | # flake8: noqa | ||||
from unittest.mock import patch | from unittest.mock import patch, MagicMock | ||||
from django.utils.html import escape | from django.utils.html import escape | ||||
from swh.web.common.exc import NotFoundExc | from swh.web.common.exc import NotFoundExc | ||||
from swh.web.common.utils import ( | from swh.web.common.utils import ( | ||||
reverse, format_utc_iso_date, get_swh_persistent_id | reverse, format_utc_iso_date, get_swh_persistent_id, | ||||
parse_timestamp | |||||
) | ) | ||||
from swh.web.tests.testcase import SWHWebTestCase | from swh.web.tests.testcase import SWHWebTestCase | ||||
from .data.revision_test_data import ( | from .data.revision_test_data import ( | ||||
revision_id_test, revision_metadata_test, | revision_id_test, revision_metadata_test, | ||||
revision_history_log_test | revision_history_log_test | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 115 Lines • ▼ Show 20 Lines | def test_revision_browse(self, mock_service_common, mock_service_utils, | ||||
kwargs={'swh_id': swh_dir_id}) | kwargs={'swh_id': swh_dir_id}) | ||||
self.assertContains(resp, swh_dir_id) | self.assertContains(resp, swh_dir_id) | ||||
self.assertContains(resp, swh_dir_id_url) | self.assertContains(resp, swh_dir_id_url) | ||||
@patch('swh.web.browse.views.revision.service') | @patch('swh.web.browse.views.revision.service') | ||||
def test_revision_log_browse(self, mock_service): | def test_revision_log_browse(self, mock_service): | ||||
per_page = 10 | per_page = 10 | ||||
mock_service.lookup_revision_log.return_value = \ | revision_history_log_test_sorted = \ | ||||
revision_history_log_test[:per_page+1] | sorted(revision_history_log_test, | ||||
key=lambda rev: -parse_timestamp(rev['committer_date']).timestamp()) | |||||
mock_revs_walker = MagicMock() | |||||
mock_revs_walker.__iter__.return_value = revision_history_log_test_sorted | |||||
mock_revs_walker.export_state.return_value = {} | |||||
mock_service.get_revisions_walker.return_value = mock_revs_walker | |||||
url = reverse('browse-revision-log', | url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': revision_id_test}, | kwargs={'sha1_git': revision_id_test}, | ||||
query_params={'per_page': per_page}) | query_params={'per_page': per_page}) | ||||
resp = self.client.get(url) | resp = self.client.get(url) | ||||
prev_rev = revision_history_log_test[per_page]['id'] | |||||
next_page_url = reverse('browse-revision-log', | next_page_url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': prev_rev}, | kwargs={'sha1_git': revision_id_test}, | ||||
query_params={'revs_breadcrumb': revision_id_test, | query_params={'offset': per_page, | ||||
'per_page': per_page}) | 'per_page': per_page}) | ||||
self.assertEqual(resp.status_code, 200) | self.assertEqual(resp.status_code, 200) | ||||
self.assertTemplateUsed('browse/revision-log.html') | self.assertTemplateUsed('browse/revision-log.html') | ||||
self.assertContains(resp, '<tr class="swh-revision-log-entry">', | self.assertContains(resp, '<tr class="swh-revision-log-entry">', | ||||
count=per_page) | count=per_page) | ||||
self.assertContains(resp, '<li class="page-item disabled"><a class="page-link">Newer</a></li>') | self.assertContains(resp, '<li class="page-item disabled"><a class="page-link">Newer</a></li>') | ||||
self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Older</a></li>' % | self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Older</a></li>' % | ||||
escape(next_page_url)) | escape(next_page_url)) | ||||
for log in revision_history_log_test[:per_page]: | for log in revision_history_log_test_sorted[:per_page]: | ||||
author_url = reverse('browse-person', | author_url = reverse('browse-person', | ||||
kwargs={'person_id': log['author']['id']}) | kwargs={'person_id': log['author']['id']}) | ||||
revision_url = reverse('browse-revision', | revision_url = reverse('browse-revision', | ||||
kwargs={'sha1_git': log['id']}) | kwargs={'sha1_git': log['id']}) | ||||
directory_url = reverse('browse-directory', | |||||
kwargs={'sha1_git': log['directory']}) | |||||
self.assertContains(resp, '<a href="%s">%s</a>' % | self.assertContains(resp, '<a href="%s">%s</a>' % | ||||
(author_url, log['author']['name'])) | (author_url, log['author']['name'])) | ||||
self.assertContains(resp, '<a href="%s">%s</a>' % | self.assertContains(resp, '<a href="%s">%s</a>' % | ||||
(revision_url, log['id'][:7])) | (revision_url, log['id'][:7])) | ||||
self.assertContains(resp, directory_url) | |||||
mock_service.lookup_revision_log.return_value = \ | |||||
revision_history_log_test[per_page:2*per_page+1] | |||||
resp = self.client.get(next_page_url) | resp = self.client.get(next_page_url) | ||||
prev_prev_rev = revision_history_log_test[2*per_page]['id'] | |||||
prev_page_url = reverse('browse-revision-log', | prev_page_url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': revision_id_test}, | kwargs={'sha1_git': revision_id_test}, | ||||
query_params={'per_page': per_page}) | query_params={'per_page': per_page}) | ||||
next_page_url = reverse('browse-revision-log', | next_page_url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': prev_prev_rev}, | kwargs={'sha1_git': revision_id_test}, | ||||
query_params={'revs_breadcrumb': revision_id_test + '/' + prev_rev, | query_params={'offset': 2 * per_page, | ||||
'per_page': per_page}) | 'per_page': per_page}) | ||||
self.assertEqual(resp.status_code, 200) | self.assertEqual(resp.status_code, 200) | ||||
self.assertTemplateUsed('browse/revision-log.html') | self.assertTemplateUsed('browse/revision-log.html') | ||||
self.assertContains(resp, '<tr class="swh-revision-log-entry">', | self.assertContains(resp, '<tr class="swh-revision-log-entry">', | ||||
count=per_page) | count=per_page) | ||||
self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Newer</a></li>' % | self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Newer</a></li>' % | ||||
escape(prev_page_url)) | escape(prev_page_url)) | ||||
self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Older</a></li>' % | self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Older</a></li>' % | ||||
escape(next_page_url)) | escape(next_page_url)) | ||||
mock_service.lookup_revision_log.return_value = \ | |||||
revision_history_log_test[2*per_page:3*per_page+1] | |||||
resp = self.client.get(next_page_url) | resp = self.client.get(next_page_url) | ||||
prev_prev_prev_rev = revision_history_log_test[3*per_page]['id'] | |||||
prev_page_url = reverse('browse-revision-log', | prev_page_url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': prev_rev}, | kwargs={'sha1_git': revision_id_test}, | ||||
query_params={'revs_breadcrumb': revision_id_test, | query_params={'offset': per_page, | ||||
'per_page': per_page}) | 'per_page': per_page}) | ||||
next_page_url = reverse('browse-revision-log', | next_page_url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': prev_prev_prev_rev}, | kwargs={'sha1_git': revision_id_test}, | ||||
query_params={'revs_breadcrumb': revision_id_test + '/' + prev_rev + '/' + prev_prev_rev, | query_params={'offset': 3 * per_page, | ||||
'per_page': per_page}) | 'per_page': per_page}) | ||||
self.assertEqual(resp.status_code, 200) | self.assertEqual(resp.status_code, 200) | ||||
self.assertTemplateUsed('browse/revision-log.html') | self.assertTemplateUsed('browse/revision-log.html') | ||||
self.assertContains(resp, '<tr class="swh-revision-log-entry">', | self.assertContains(resp, '<tr class="swh-revision-log-entry">', | ||||
count=per_page) | count=per_page) | ||||
self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Newer</a></li>' % | self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Newer</a></li>' % | ||||
escape(prev_page_url)) | escape(prev_page_url)) | ||||
self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Older</a></li>' % | self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Older</a></li>' % | ||||
escape(next_page_url)) | escape(next_page_url)) | ||||
mock_service.lookup_revision_log.return_value = \ | |||||
revision_history_log_test[3*per_page:3*per_page+per_page//2] | |||||
resp = self.client.get(next_page_url) | |||||
prev_page_url = reverse('browse-revision-log', | |||||
kwargs={'sha1_git': prev_prev_rev}, | |||||
query_params={'revs_breadcrumb': revision_id_test + '/' + prev_rev, | |||||
'per_page': per_page}) | |||||
self.assertEqual(resp.status_code, 200) | |||||
self.assertTemplateUsed('browse/revision-log.html') | |||||
self.assertContains(resp, '<tr class="swh-revision-log-entry">', | |||||
count=per_page//2) | |||||
self.assertContains(resp, '<li class="page-item disabled"><a class="page-link">Older</a></li>') | |||||
self.assertContains(resp, '<li class="page-item"><a class="page-link" href="%s">Newer</a></li>' % | |||||
escape(prev_page_url)) | |||||
@patch('swh.web.browse.utils.service') | @patch('swh.web.browse.utils.service') | ||||
@patch('swh.web.browse.views.revision.service') | @patch('swh.web.browse.views.revision.service') | ||||
def test_revision_request_errors(self, mock_service, mock_utils_service): | def test_revision_request_errors(self, mock_service, mock_utils_service): | ||||
mock_service.lookup_revision.side_effect = \ | mock_service.lookup_revision.side_effect = \ | ||||
NotFoundExc('Revision not found') | NotFoundExc('Revision not found') | ||||
url = reverse('browse-revision', | url = reverse('browse-revision', | ||||
kwargs={'sha1_git': revision_id_test}) | kwargs={'sha1_git': revision_id_test}) | ||||
resp = self.client.get(url) | resp = self.client.get(url) | ||||
self.assertEqual(resp.status_code, 404) | self.assertEqual(resp.status_code, 404) | ||||
self.assertTemplateUsed('error.html') | self.assertTemplateUsed('error.html') | ||||
self.assertContains(resp, 'Revision not found', status_code=404) | self.assertContains(resp, 'Revision not found', status_code=404) | ||||
mock_service.lookup_revision_log.side_effect = \ | mock_service.get_revisions_walker.side_effect = \ | ||||
NotFoundExc('Revision not found') | NotFoundExc('Revision not found') | ||||
url = reverse('browse-revision-log', | url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': revision_id_test}) | kwargs={'sha1_git': revision_id_test}) | ||||
resp = self.client.get(url) | resp = self.client.get(url) | ||||
self.assertEqual(resp.status_code, 404) | self.assertEqual(resp.status_code, 404) | ||||
self.assertTemplateUsed('error.html') | self.assertTemplateUsed('error.html') | ||||
self.assertContains(resp, 'Revision not found', status_code=404) | self.assertContains(resp, 'Revision not found', status_code=404) | ||||
Show All 13 Lines |