Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9345428
D2325.id8022.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
D2325.id8022.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 3, 3:21 PM (6 d, 8 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3223214
Attached To
D2325: Re-add origin tests.
Event Timeline
Log In to Comment