Page MenuHomeSoftware Heritage

D2325.id8022.diff
No OneTemporary

D2325.id8022.diff

diff --git a/swh/web/tests/api/views/test_origin.py b/swh/web/tests/api/views/test_origin.py
--- a/swh/web/tests/api/views/test_origin.py
+++ b/swh/web/tests/api/views/test_origin.py
@@ -4,6 +4,7 @@
# See top-level LICENSE file for more information
from hypothesis import given
+import pytest
from requests.utils import parse_header_links
from swh.storage.exc import StorageDBError, StorageAPIError
@@ -339,6 +340,152 @@
}
+def test_api_origins(api_client, archive_data):
+ origins = list(archive_data.origin_get_range(0, 10000))
+ origin_urls = {origin['url'] for origin in origins}
+
+ # Get only one
+ url = reverse('api-1-origins',
+ query_params={'origin_count': 1})
+ rv = api_client.get(url)
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert len(rv.data) == 1
+ assert {origin['url'] for origin in rv.data} <= origin_urls
+
+ # Get all
+ url = reverse('api-1-origins',
+ query_params={'origin_count': len(origins)})
+ rv = api_client.get(url)
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert len(rv.data) == len(origins)
+ assert {origin['url'] for origin in rv.data} == origin_urls
+
+ # Get "all + 10"
+ url = reverse('api-1-origins',
+ query_params={'origin_count': len(origins)+10})
+ rv = api_client.get(url)
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert len(rv.data) == len(origins)
+ assert {origin['url'] for origin in rv.data} == origin_urls
+
+
+@pytest.mark.parametrize('origin_count', [1, 2, 10, 100])
+def test_api_origins_scroll(api_client, archive_data, origin_count):
+ origins = list(archive_data.origin_get_range(0, 10000))
+ origin_urls = {origin['url'] for origin in origins}
+
+ url = reverse('api-1-origins',
+ query_params={'origin_count': origin_count})
+
+ results = _scroll_results(api_client, url)
+
+ assert len(results) == len(origins)
+ assert {origin['url'] for origin in results} == origin_urls
+
+
+@given(origin())
+def test_api_origin_by_url(api_client, archive_data, origin):
+ url = reverse('api-1-origin',
+ url_args={'origin_url': origin['url']})
+ rv = api_client.get(url)
+
+ expected_origin = archive_data.origin_get(origin)
+
+ origin_visits_url = reverse('api-1-origin-visits',
+ url_args={'origin_url': origin['url']})
+
+ expected_origin['origin_visits_url'] = origin_visits_url
+
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert rv.data == expected_origin
+
+
+@given(new_origin())
+def test_api_origin_not_found(api_client, new_origin):
+
+ url = reverse('api-1-origin',
+ url_args={'origin_url': new_origin['url']})
+ rv = api_client.get(url)
+
+ assert rv.status_code == 404, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert rv.data == {
+ 'exception': 'NotFoundExc',
+ 'reason': 'Origin with url %s not found!' % new_origin['url']
+ }
+
+
+def test_api_origin_search(api_client):
+ expected_origins = {
+ 'https://github.com/wcoder/highlightjs-line-numbers.js',
+ 'https://github.com/memononen/libtess2',
+ }
+
+ # Search for 'github.com', get only one
+ url = reverse('api-1-origin-search',
+ url_args={'url_pattern': 'github.com'},
+ query_params={'limit': 1})
+ rv = api_client.get(url)
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert len(rv.data) == 1
+ assert {origin['url'] for origin in rv.data} <= expected_origins
+
+ # Search for 'github.com', get all
+ url = reverse('api-1-origin-search',
+ url_args={'url_pattern': 'github.com'},
+ query_params={'limit': 2})
+ rv = api_client.get(url)
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert {origin['url'] for origin in rv.data} == expected_origins
+
+ # Search for 'github.com', get more than available
+ url = reverse('api-1-origin-search',
+ url_args={'url_pattern': 'github.com'},
+ query_params={'limit': 10})
+ rv = api_client.get(url)
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert {origin['url'] for origin in rv.data} == expected_origins
+
+
+def test_api_origin_search_regexp(api_client):
+ expected_origins = {
+ 'https://github.com/memononen/libtess2',
+ 'repo_with_submodules'
+ }
+
+ url = reverse('api-1-origin-search',
+ url_args={'url_pattern': '(repo|libtess)'},
+ query_params={'limit': 10,
+ 'regexp': True})
+ rv = api_client.get(url)
+ assert rv.status_code == 200, rv.data
+ assert rv['Content-Type'] == 'application/json'
+ assert {origin['url'] for origin in rv.data} == expected_origins
+
+
+@pytest.mark.parametrize('limit', [1, 2, 3, 10])
+def test_api_origin_search_scroll(api_client, archive_data, limit):
+ expected_origins = {
+ 'https://github.com/wcoder/highlightjs-line-numbers.js',
+ 'https://github.com/memononen/libtess2',
+ }
+
+ url = reverse('api-1-origin-search',
+ url_args={'url_pattern': 'github.com'},
+ query_params={'limit': limit})
+
+ results = _scroll_results(api_client, url)
+
+ assert {origin['url'] for origin in results} == expected_origins
+
+
def test_api_origin_search_limit(api_client, archive_data):
archive_data.origin_add([
{'url': 'http://foobar/{}'.format(i)}

File Metadata

Mime Type
text/plain
Expires
Thu, Jul 3, 3:21 PM (5 d, 22 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3223214

Event Timeline