Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_origin.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 | ||||
from unittest.mock import patch | from unittest.mock import patch | ||||
from hypothesis import given, strategies | from hypothesis import given, strategies | ||||
import pytest | import pytest | ||||
from requests.utils import parse_header_links | from requests.utils import parse_header_links | ||||
from rest_framework.test import APITestCase | from rest_framework.test import APITestCase | ||||
from swh.storage.exc import StorageDBError, StorageAPIError | from swh.storage.exc import StorageDBError, StorageAPIError | ||||
from swh.web.common.exc import BadInputExc | |||||
from swh.web.common.utils import reverse | from swh.web.common.utils import reverse | ||||
from swh.web.common.origin_visits import get_origin_visits | from swh.web.common.origin_visits import get_origin_visits | ||||
from swh.web.tests.strategies import ( | from swh.web.tests.strategies import ( | ||||
origin, new_origin, visit_dates, new_snapshots | origin, new_origin, visit_dates, new_snapshots | ||||
) | ) | ||||
from swh.web.tests.testcase import WebTestCase | from swh.web.tests.testcase import WebTestCase | ||||
from swh.web.tests.data import get_tests_data | from swh.web.tests.data import get_tests_data | ||||
Show All 27 Lines | class OriginApiTestCase(WebTestCase, APITestCase): | ||||
@patch('swh.web.api.views.origin.get_origin_visits') | @patch('swh.web.api.views.origin.get_origin_visits') | ||||
def test_api_lookup_origin_visits_raise_error( | def test_api_lookup_origin_visits_raise_error( | ||||
self, mock_get_origin_visits, | self, mock_get_origin_visits, | ||||
): | ): | ||||
err_msg = 'voluntary error to check the bad request middleware.' | err_msg = 'voluntary error to check the bad request middleware.' | ||||
mock_get_origin_visits.side_effect = ValueError(err_msg) | mock_get_origin_visits.side_effect = BadInputExc(err_msg) | ||||
url = reverse( | url = reverse( | ||||
'api-1-origin-visits', url_args={'origin_url': 'http://foo'}) | 'api-1-origin-visits', url_args={'origin_url': 'http://foo'}) | ||||
rv = self.client.get(url) | rv = self.client.get(url) | ||||
self.assertEqual(rv.status_code, 400, rv.data) | self.assertEqual(rv.status_code, 400, rv.data) | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | self.assertEqual(rv['Content-Type'], 'application/json') | ||||
self.assertEqual(rv.data, { | self.assertEqual(rv.data, { | ||||
'exception': 'ValueError', | 'exception': 'BadInputExc', | ||||
'reason': err_msg}) | 'reason': err_msg}) | ||||
@patch('swh.web.api.views.origin.get_origin_visits') | @patch('swh.web.api.views.origin.get_origin_visits') | ||||
def test_api_lookup_origin_visits_raise_swh_storage_error_db( | def test_api_lookup_origin_visits_raise_swh_storage_error_db( | ||||
self, mock_get_origin_visits): | self, mock_get_origin_visits): | ||||
err_msg = 'Storage exploded! Will be back online shortly!' | err_msg = 'Storage exploded! Will be back online shortly!' | ||||
▲ Show 20 Lines • Show All 393 Lines • ▼ Show 20 Lines | def test_api_origin_search_scroll(self, limit): | ||||
url_args={'url_pattern': 'github.com'}, | url_args={'url_pattern': 'github.com'}, | ||||
query_params={'limit': limit}) | query_params={'limit': limit}) | ||||
results = self._scroll_results(url) | results = self._scroll_results(url) | ||||
self.assertEqual({origin['url'] for origin in results}, | self.assertEqual({origin['url'] for origin in results}, | ||||
expected_origins) | expected_origins) | ||||
def test_api_origin_search_limit(self): | |||||
self.storage.origin_add([ | |||||
{'url': 'http://foobar/{}'.format(i)} | |||||
for i in range(2000) | |||||
]) | |||||
url = reverse('api-1-origin-search', | |||||
url_args={'url_pattern': 'foobar'}, | |||||
query_params={'limit': 1050}) | |||||
rv = self.client.get(url) | |||||
self.assertEqual(rv.status_code, 200, rv.data) | |||||
self.assertEqual(rv['Content-Type'], 'application/json') | |||||
self.assertEqual(len(rv.data), 1000) | |||||
@given(origin()) | @given(origin()) | ||||
def test_api_origin_metadata_search(self, origin): | def test_api_origin_metadata_search(self, origin): | ||||
with patch('swh.web.common.service.idx_storage') as mock_idx_storage: | with patch('swh.web.common.service.idx_storage') as mock_idx_storage: | ||||
mock_idx_storage.origin_intrinsic_metadata_search_fulltext \ | mock_idx_storage.origin_intrinsic_metadata_search_fulltext \ | ||||
.side_effect = lambda conjunction, limit: [{ | .side_effect = lambda conjunction, limit: [{ | ||||
'from_revision': ( | 'from_revision': ( | ||||
b'p&\xb7\xc1\xa2\xafVR\x1e\x95\x1c\x01\xed ' | b'p&\xb7\xc1\xa2\xafVR\x1e\x95\x1c\x01\xed ' | ||||
b'\xf2U\xfa\x05B8'), | b'\xf2U\xfa\x05B8'), | ||||
▲ Show 20 Lines • Show All 137 Lines • Show Last 20 Lines |