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 hypothesis import given | from hypothesis import given | ||||
import pytest | import pytest | ||||
from requests.utils import parse_header_links | from requests.utils import parse_header_links | ||||
from swh.storage.exc import StorageDBError, StorageAPIError | from swh.storage.exc import StorageDBError, StorageAPIError | ||||
from swh.web.api.utils import enrich_origin_visit, enrich_origin | |||||
from swh.web.common.exc import BadInputExc | 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 | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | for i, visit_date in enumerate(visit_dates): | ||||
archive_data.origin_visit_update( | archive_data.origin_visit_update( | ||||
new_origin['url'], origin_visit['visit'], | new_origin['url'], origin_visit['visit'], | ||||
snapshot=new_snapshots[i]['id']) | snapshot=new_snapshots[i]['id']) | ||||
all_visits = list(reversed(get_origin_visits(new_origin))) | all_visits = list(reversed(get_origin_visits(new_origin))) | ||||
for last_visit, expected_visits in ( | for last_visit, expected_visits in ( | ||||
(None, all_visits[:2]), | (None, all_visits[:2]), | ||||
(all_visits[1]['visit'], all_visits[2:4])): | (all_visits[1]['visit'], all_visits[2:])): | ||||
url = reverse('api-1-origin-visits', | url = reverse('api-1-origin-visits', | ||||
url_args={'origin_url': new_origin['url']}, | url_args={'origin_url': new_origin['url']}, | ||||
query_params={'per_page': 2, | query_params={'per_page': 2, | ||||
'last_visit': last_visit}) | 'last_visit': last_visit}) | ||||
rv = api_client.get(url) | rv = api_client.get(url) | ||||
assert rv.status_code == 200, rv.data | assert rv.status_code == 200, rv.data | ||||
assert rv['Content-Type'] == 'application/json' | assert rv['Content-Type'] == 'application/json' | ||||
for expected_visit in expected_visits: | for i in range(len(expected_visits)): | ||||
origin_visit_url = reverse( | expected_visits[i] = enrich_origin_visit( | ||||
'api-1-origin-visit', | expected_visits[i], with_origin_link=False, | ||||
url_args={'origin_url': new_origin['url'], | with_origin_visit_link=True, request=rv.wsgi_request) | ||||
'visit_id': expected_visit['visit']}) | |||||
snapshot_url = reverse( | |||||
'api-1-snapshot', | |||||
url_args={'snapshot_id': expected_visit['snapshot']}) | |||||
expected_visit['origin'] = new_origin['url'] | |||||
expected_visit['origin_visit_url'] = origin_visit_url | |||||
expected_visit['snapshot_url'] = snapshot_url | |||||
assert rv.data == expected_visits | assert rv.data == expected_visits | ||||
@given(new_origin(), visit_dates(3), new_snapshots(3)) | @given(new_origin(), visit_dates(3), new_snapshots(3)) | ||||
def test_api_lookup_origin_visits_by_id(api_client, archive_data, new_origin, | def test_api_lookup_origin_visits_by_id(api_client, archive_data, new_origin, | ||||
visit_dates, new_snapshots): | visit_dates, new_snapshots): | ||||
archive_data.origin_add_one(new_origin) | archive_data.origin_add_one(new_origin) | ||||
Show All 16 Lines | for last_visit, expected_visits in ( | ||||
query_params={'per_page': 2, | query_params={'per_page': 2, | ||||
'last_visit': last_visit}) | 'last_visit': last_visit}) | ||||
rv = api_client.get(url) | rv = api_client.get(url) | ||||
assert rv.status_code == 200, rv.data | assert rv.status_code == 200, rv.data | ||||
assert rv['Content-Type'] == 'application/json' | assert rv['Content-Type'] == 'application/json' | ||||
for expected_visit in expected_visits: | for i in range(len(expected_visits)): | ||||
origin_visit_url = reverse( | expected_visits[i] = enrich_origin_visit( | ||||
'api-1-origin-visit', | expected_visits[i], with_origin_link=False, | ||||
url_args={'origin_url': new_origin['url'], | with_origin_visit_link=True, request=rv.wsgi_request) | ||||
'visit_id': expected_visit['visit']}) | |||||
snapshot_url = reverse( | |||||
'api-1-snapshot', | |||||
url_args={'snapshot_id': expected_visit['snapshot']}) | |||||
expected_visit['origin'] = new_origin['url'] | |||||
expected_visit['origin_visit_url'] = origin_visit_url | |||||
expected_visit['snapshot_url'] = snapshot_url | |||||
assert rv.data == expected_visits | assert rv.data == expected_visits | ||||
@given(new_origin(), visit_dates(3), new_snapshots(3)) | @given(new_origin(), visit_dates(3), new_snapshots(3)) | ||||
def test_api_lookup_origin_visit(api_client, archive_data, new_origin, | def test_api_lookup_origin_visit(api_client, archive_data, new_origin, | ||||
visit_dates, new_snapshots): | visit_dates, new_snapshots): | ||||
archive_data.origin_add_one(new_origin) | archive_data.origin_add_one(new_origin) | ||||
Show All 11 Lines | for i, visit_date in enumerate(visit_dates): | ||||
rv = api_client.get(url) | rv = api_client.get(url) | ||||
assert rv.status_code == 200, rv.data | assert rv.status_code == 200, rv.data | ||||
assert rv['Content-Type'] == 'application/json' | assert rv['Content-Type'] == 'application/json' | ||||
expected_visit = archive_data.origin_visit_get_by( | expected_visit = archive_data.origin_visit_get_by( | ||||
new_origin['url'], visit_id) | new_origin['url'], visit_id) | ||||
origin_url = reverse('api-1-origin', | expected_visit = enrich_origin_visit( | ||||
url_args={'origin_url': new_origin['url']}) | expected_visit, with_origin_link=True, | ||||
snapshot_url = reverse( | with_origin_visit_link=False, request=rv.wsgi_request) | ||||
'api-1-snapshot', | |||||
url_args={'snapshot_id': expected_visit['snapshot']}) | |||||
expected_visit['origin'] = new_origin['url'] | |||||
expected_visit['origin_url'] = origin_url | |||||
expected_visit['snapshot_url'] = snapshot_url | |||||
assert rv.data == expected_visit | assert rv.data == expected_visit | ||||
@given(new_origin()) | @given(new_origin()) | ||||
def test_api_lookup_origin_visit_latest_no_visit(api_client, archive_data, | def test_api_lookup_origin_visit_latest_no_visit(api_client, archive_data, | ||||
new_origin): | new_origin): | ||||
archive_data.origin_add_one(new_origin) | archive_data.origin_add_one(new_origin) | ||||
Show All 24 Lines | def test_api_lookup_origin_visit_latest(api_client, archive_data, new_origin, | ||||
archive_data.origin_visit_update( | archive_data.origin_visit_update( | ||||
new_origin['url'], visit_ids[0], | new_origin['url'], visit_ids[0], | ||||
snapshot=new_snapshots[0]['id']) | snapshot=new_snapshots[0]['id']) | ||||
url = reverse('api-1-origin-visit-latest', | url = reverse('api-1-origin-visit-latest', | ||||
url_args={'origin_url': new_origin['url']}) | url_args={'origin_url': new_origin['url']}) | ||||
rv = api_client.get(url) | rv = api_client.get(url) | ||||
assert rv.status_code == 200, rv.data | assert rv.status_code == 200, rv.data | ||||
assert rv['Content-Type'] == 'application/json' | assert rv['Content-Type'] == 'application/json' | ||||
expected_visit = archive_data.origin_visit_get_by( | expected_visit = archive_data.origin_visit_get_by( | ||||
new_origin['url'], visit_ids[1]) | new_origin['url'], visit_ids[1]) | ||||
origin_url = reverse('api-1-origin', | expected_visit = enrich_origin_visit( | ||||
url_args={'origin_url': new_origin['url']}) | expected_visit, with_origin_link=True, | ||||
with_origin_visit_link=False, request=rv.wsgi_request) | |||||
expected_visit['origin'] = new_origin['url'] | |||||
expected_visit['origin_url'] = origin_url | |||||
expected_visit['snapshot_url'] = None | |||||
assert rv.data == expected_visit | assert rv.data == expected_visit | ||||
@given(new_origin(), visit_dates(2), new_snapshots(1)) | @given(new_origin(), visit_dates(2), new_snapshots(1)) | ||||
def test_api_lookup_origin_visit_latest_with_snapshot(api_client, archive_data, | def test_api_lookup_origin_visit_latest_with_snapshot(api_client, archive_data, | ||||
new_origin, visit_dates, | new_origin, visit_dates, | ||||
new_snapshots): | new_snapshots): | ||||
archive_data.origin_add_one(new_origin) | archive_data.origin_add_one(new_origin) | ||||
visit_dates.sort() | visit_dates.sort() | ||||
visit_ids = [] | visit_ids = [] | ||||
for i, visit_date in enumerate(visit_dates): | for i, visit_date in enumerate(visit_dates): | ||||
origin_visit = archive_data.origin_visit_add( | origin_visit = archive_data.origin_visit_add( | ||||
new_origin['url'], visit_date, type='git') | new_origin['url'], visit_date, type='git') | ||||
visit_ids.append(origin_visit['visit']) | visit_ids.append(origin_visit['visit']) | ||||
archive_data.snapshot_add([new_snapshots[0]]) | archive_data.snapshot_add([new_snapshots[0]]) | ||||
archive_data.origin_visit_update( | archive_data.origin_visit_update( | ||||
new_origin['url'], visit_ids[0], | new_origin['url'], visit_ids[0], | ||||
snapshot=new_snapshots[0]['id']) | snapshot=new_snapshots[0]['id']) | ||||
url = reverse('api-1-origin-visit-latest', | url = reverse('api-1-origin-visit-latest', | ||||
url_args={'origin_url': new_origin['url']}) | url_args={'origin_url': new_origin['url']}, | ||||
url += '?require_snapshot=true' | query_params={'require_snapshot': True}) | ||||
rv = api_client.get(url) | rv = api_client.get(url) | ||||
assert rv.status_code == 200, rv.data | assert rv.status_code == 200, rv.data | ||||
assert rv['Content-Type'] == 'application/json' | assert rv['Content-Type'] == 'application/json' | ||||
expected_visit = archive_data.origin_visit_get_by( | expected_visit = archive_data.origin_visit_get_by( | ||||
new_origin['url'], visit_ids[0]) | new_origin['url'], visit_ids[0]) | ||||
origin_url = reverse('api-1-origin', | expected_visit = enrich_origin_visit( | ||||
url_args={'origin_url': new_origin['url']}) | expected_visit, with_origin_link=True, | ||||
snapshot_url = reverse( | with_origin_visit_link=False, request=rv.wsgi_request) | ||||
'api-1-snapshot', | |||||
url_args={'snapshot_id': expected_visit['snapshot']}) | |||||
expected_visit['origin'] = new_origin['url'] | |||||
expected_visit['origin_url'] = origin_url | |||||
expected_visit['snapshot_url'] = snapshot_url | |||||
assert rv.data == expected_visit | assert rv.data == expected_visit | ||||
@given(origin()) | @given(origin()) | ||||
def test_api_lookup_origin_visit_not_found(api_client, origin): | def test_api_lookup_origin_visit_not_found(api_client, origin): | ||||
all_visits = list(reversed(get_origin_visits(origin))) | all_visits = list(reversed(get_origin_visits(origin))) | ||||
▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
@given(origin()) | @given(origin()) | ||||
def test_api_origin_by_url(api_client, archive_data, origin): | def test_api_origin_by_url(api_client, archive_data, origin): | ||||
url = reverse('api-1-origin', | url = reverse('api-1-origin', | ||||
url_args={'origin_url': origin['url']}) | url_args={'origin_url': origin['url']}) | ||||
rv = api_client.get(url) | rv = api_client.get(url) | ||||
expected_origin = archive_data.origin_get(origin) | expected_origin = archive_data.origin_get(origin) | ||||
origin_visits_url = reverse('api-1-origin-visits', | expected_origin = enrich_origin(expected_origin, rv.wsgi_request) | ||||
url_args={'origin_url': origin['url']}) | |||||
expected_origin['origin_visits_url'] = origin_visits_url | |||||
assert rv.status_code == 200, rv.data | assert rv.status_code == 200, rv.data | ||||
assert rv['Content-Type'] == 'application/json' | assert rv['Content-Type'] == 'application/json' | ||||
assert rv.data == expected_origin | assert rv.data == expected_origin | ||||
@given(new_origin()) | @given(new_origin()) | ||||
def test_api_origin_not_found(api_client, new_origin): | def test_api_origin_not_found(api_client, new_origin): | ||||
▲ Show 20 Lines • Show All 262 Lines • Show Last 20 Lines |