Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7343010
D827.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
33 KB
Subscribers
None
D827.diff
View Options
diff --git a/swh/web/tests/api/views/test_content.py b/swh/web/tests/api/views/test_content.py
--- a/swh/web/tests/api/views/test_content.py
+++ b/swh/web/tests/api/views/test_content.py
@@ -3,223 +3,138 @@
# License: GNU Affero General Public License version 3, or any later version
# See top-level LICENSE file for more information
+import pytest
+
+from hypothesis import given
from rest_framework.test import APITestCase
-from unittest.mock import patch
-from swh.web.tests.testcase import WebTestCase
+from swh.web.common.utils import reverse
+from swh.web.tests.strategies import (
+ content, unknown_content, contents_with_ctags
+)
+from swh.web.tests.testcase import (
+ WebTestCase, ctags_json_missing, fossology_missing
+)
class ContentApiTestCase(WebTestCase, APITestCase):
- @patch('swh.web.api.views.content.service')
- def test_api_content_filetype(self, mock_service):
- stub_filetype = {
- 'accepted_media_type': 'application/xml',
- 'encoding': 'ascii',
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- }
- mock_service.lookup_content_filetype.return_value = stub_filetype
-
- # when
- rv = self.client.get(
- '/api/1/content/'
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f/filetype/')
-
- # then
+
+ @given(content())
+ def test_api_content_filetype(self, content):
+
+ self.content_add_mimetype(content['sha1'])
+ url = reverse('api-content-filetype',
+ url_args={'q': 'sha1_git:%s' % content['sha1_git']})
+ rv = self.client.get(url)
+
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, {
- 'accepted_media_type': 'application/xml',
- 'encoding': 'ascii',
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'content_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/',
- })
+ content_url = reverse('api-content',
+ url_args={'q': 'sha1:%s' % content['sha1']})
+ expected_data = self.content_get_mimetype(content['sha1'])
+ expected_data['content_url'] = content_url
+ self.assertEqual(rv.data, expected_data)
- mock_service.lookup_content_filetype.assert_called_once_with(
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f')
+ @given(unknown_content())
+ def test_api_content_filetype_sha_not_found(self, unknown_content):
- @patch('swh.web.api.views.content.service')
- def test_api_content_filetype_sha_not_found(self, mock_service):
- # given
- mock_service.lookup_content_filetype.return_value = None
+ url = reverse('api-content-filetype',
+ url_args={'q': 'sha1:%s' % unknown_content['sha1']})
+ rv = self.client.get(url)
- # when
- rv = self.client.get(
- '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/'
- 'filetype/')
-
- # then
self.assertEqual(rv.status_code, 404)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
'exception': 'NotFoundExc',
'reason': 'No filetype information found for content '
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.'
+ 'sha1:%s.' % unknown_content['sha1']
})
- mock_service.lookup_content_filetype.assert_called_once_with(
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03')
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_language(self, mock_service):
- stub_language = {
- 'lang': 'lisp',
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- }
- mock_service.lookup_content_language.return_value = stub_language
+ @given(content())
+ def test_api_content_language(self, content):
- # when
- rv = self.client.get(
- '/api/1/content/'
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f/language/')
+ self.content_add_language(content['sha1'])
+ url = reverse('api-content-language',
+ url_args={'q': 'sha1_git:%s' % content['sha1_git']})
+ rv = self.client.get(url)
- # then
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, {
- 'lang': 'lisp',
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'content_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/',
- })
+ content_url = reverse('api-content',
+ url_args={'q': 'sha1:%s' % content['sha1']})
+ expected_data = self.content_get_language(content['sha1'])
+ expected_data['content_url'] = content_url
+ self.assertEqual(rv.data, expected_data)
- mock_service.lookup_content_language.assert_called_once_with(
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f')
+ @given(unknown_content())
+ def test_api_content_language_sha_not_found(self, unknown_content):
- @patch('swh.web.api.views.content.service')
- def test_api_content_language_sha_not_found(self, mock_service):
- # given
- mock_service.lookup_content_language.return_value = None
+ url = reverse('api-content-language',
+ url_args={'q': 'sha1:%s' % unknown_content['sha1']})
+ rv = self.client.get(url)
- # when
- rv = self.client.get(
- '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03'
- '/language/')
-
- # then
self.assertEqual(rv.status_code, 404)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
'exception': 'NotFoundExc',
'reason': 'No language information found for content '
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.'
+ 'sha1:%s.' % unknown_content['sha1']
})
- mock_service.lookup_content_language.assert_called_once_with(
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03')
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_symbol(self, mock_service):
- stub_ctag = [{
- 'sha1': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'name': 'foobar',
- 'kind': 'Haskell',
- 'line': 10,
- }]
- mock_service.lookup_expression.return_value = stub_ctag
+ @pytest.mark.skipif(ctags_json_missing,
+ reason="requires ctags with json output support")
+ @given(contents_with_ctags())
+ def test_api_content_symbol(self, contents_with_ctags):
+
+ expected_data = {}
+ for content_sha1 in contents_with_ctags['sha1s']:
+ self.content_add_ctags(content_sha1)
+ for ctag in self.content_get_ctags(content_sha1):
+ if ctag['name'] == contents_with_ctags['symbol_name']:
+ expected_data[content_sha1] = ctag
+ break
+ url = reverse('api-content-symbol',
+ url_args={'q': contents_with_ctags['symbol_name']},
+ query_params={'per_page': 100})
+ rv = self.client.get(url)
- # when
- rv = self.client.get('/api/1/content/symbol/foo/?last_sha1=sha1')
-
- # then
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, [{
- 'sha1': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'name': 'foobar',
- 'kind': 'Haskell',
- 'line': 10,
- 'content_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/',
- 'data_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/raw/',
- 'license_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/license/',
- 'language_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/language/',
- 'filetype_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/filetype/',
- }])
+ for entry in rv.data:
+ content_sha1 = entry['sha1']
+ expected_entry = expected_data[content_sha1]
+ for key, view_name in (('content_url', 'api-content'),
+ ('data_url', 'api-content-raw'),
+ ('license_url', 'api-content-license'),
+ ('language_url', 'api-content-language'),
+ ('filetype_url', 'api-content-filetype')):
+ expected_entry[key] = reverse(view_name,
+ url_args={'q': 'sha1:%s' %
+ content_sha1})
+ expected_entry['sha1'] = content_sha1
+ del expected_entry['id']
+ self.assertEqual(entry, expected_entry)
self.assertFalse('Link' in rv)
- mock_service.lookup_expression.assert_called_once_with(
- 'foo', 'sha1', 10)
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_symbol_2(self, mock_service):
- stub_ctag = [{
- 'sha1': '12371b8614fcd89ccd17ca2b1d9e66c5b00a6456',
- 'name': 'foobar',
- 'kind': 'Haskell',
- 'line': 10,
- }, {
- 'sha1': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6678',
- 'name': 'foo',
- 'kind': 'Lisp',
- 'line': 10,
- }]
- mock_service.lookup_expression.return_value = stub_ctag
-
- # when
- rv = self.client.get(
- '/api/1/content/symbol/foo/?last_sha1=prev-sha1&per_page=2')
-
- # then
- self.assertEqual(rv.status_code, 200)
- self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, stub_ctag)
- self.assertTrue(
- rv['Link'] == '</api/1/content/symbol/foo/?last_sha1=34571b8614fcd89ccd17ca2b1d9e66c5b00a6678&per_page=2>; rel="next"' or # noqa
- rv['Link'] == '</api/1/content/symbol/foo/?per_page=2&last_sha1=34571b8614fcd89ccd17ca2b1d9e66c5b00a6678>; rel="next"' # noqa
- )
- mock_service.lookup_expression.assert_called_once_with(
- 'foo', 'prev-sha1', 2)
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_symbol_3(self, mock_service):
- stub_ctag = [{
- 'sha1': '67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'name': 'foo',
- 'kind': 'variable',
- 'line': 100,
- }]
- mock_service.lookup_expression.return_value = stub_ctag
-
- # when
- rv = self.client.get('/api/1/content/symbol/foo/')
-
- # then
- self.assertEqual(rv.status_code, 200)
- self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, [{
- 'sha1': '67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'name': 'foo',
- 'kind': 'variable',
- 'line': 100,
- 'content_url': '/api/1/content/'
- 'sha1:67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03/',
- 'data_url': '/api/1/content/'
- 'sha1:67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03/raw/',
- 'license_url': '/api/1/content/'
- 'sha1:67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03/license/',
- 'language_url': '/api/1/content/'
- 'sha1:67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03/language/',
- 'filetype_url': '/api/1/content/'
- 'sha1:67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03/filetype/',
- }])
- self.assertFalse(rv.has_header('Link'))
-
- mock_service.lookup_expression.assert_called_once_with('foo', None, 10)
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_symbol_not_found(self, mock_service):
- # given
- mock_service.lookup_expression.return_value = []
-
- # when
- rv = self.client.get('/api/1/content/symbol/bar/?last_sha1=hash')
-
- # then
+ url = reverse('api-content-symbol',
+ url_args={'q': contents_with_ctags['symbol_name']},
+ query_params={'per_page': 2})
+ rv = self.client.get(url)
+
+ next_url = reverse('api-content-symbol',
+ url_args={'q': contents_with_ctags['symbol_name']},
+ query_params={'last_sha1': rv.data[1]['sha1'],
+ 'per_page': 2})
+ self.assertEqual(rv['Link'], '<%s>; rel="next"' % next_url)
+
+ @pytest.mark.xfail(reason='FIXME: exception should be raised in service')
+ @given(unknown_content())
+ def test_api_content_symbol_not_found(self, unknown_content):
+
+ url = reverse('api-content-symbol', url_args={'q': 'bar'},
+ query_params={'last_sha1': 'hash'})
+ rv = self.client.get(url)
+
self.assertEqual(rv.status_code, 404)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
@@ -228,232 +143,146 @@
})
self.assertFalse('Link' in rv)
- mock_service.lookup_expression.assert_called_once_with(
- 'bar', 'hash', 10)
+ @pytest.mark.skipif(ctags_json_missing,
+ reason="requires ctags with json output support")
+ @given(content())
+ def test_api_content_ctags(self, content):
- @patch('swh.web.api.views.content.service')
- def test_api_content_ctags(self, mock_service):
- stub_ctags = {
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'ctags': []
- }
- mock_service.lookup_content_ctags.return_value = stub_ctags
+ self.content_add_ctags(content['sha1'])
+ url = reverse('api-content-ctags',
+ url_args={'q': 'sha1_git:%s' % content['sha1_git']})
+ rv = self.client.get(url)
- # when
- rv = self.client.get(
- '/api/1/content/'
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f/ctags/')
-
- # then
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, {
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'ctags': [],
- 'content_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/',
- })
-
- mock_service.lookup_content_ctags.assert_called_once_with(
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f')
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_license(self, mock_service):
- stub_license = {
- 'licenses': ['No_license_found', 'Apache-2.0'],
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'tool_name': 'nomos',
- }
- mock_service.lookup_content_license.return_value = stub_license
-
- # when
- rv = self.client.get(
- '/api/1/content/'
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f/license/')
+ content_url = reverse('api-content',
+ url_args={'q': 'sha1:%s' % content['sha1']})
+ expected_data = list(self.content_get_ctags(content['sha1']))
+ for e in expected_data:
+ e['content_url'] = content_url
+ self.assertEqual(rv.data, expected_data)
+
+ @pytest.mark.skipif(fossology_missing,
+ reason="requires fossology-nomossa installed")
+ @given(content())
+ def test_api_content_license(self, content):
+
+ self.content_add_license(content['sha1'])
+ url = reverse('api-content-license',
+ url_args={'q': 'sha1_git:%s' % content['sha1_git']})
+ rv = self.client.get(url)
- # then
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, {
- 'licenses': ['No_license_found', 'Apache-2.0'],
- 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'tool_name': 'nomos',
- 'content_url': '/api/1/content/'
- 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/',
- })
-
- mock_service.lookup_content_license.assert_called_once_with(
- 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f')
+ content_url = reverse('api-content',
+ url_args={'q': 'sha1:%s' % content['sha1']})
+ expected_data = self.content_get_license(content['sha1'])
+ expected_data['content_url'] = content_url
+ self.assertEqual(rv.data, expected_data)
- @patch('swh.web.api.views.content.service')
- def test_api_content_license_sha_not_found(self, mock_service):
- # given
- mock_service.lookup_content_license.return_value = None
+ @given(unknown_content())
+ def test_api_content_license_sha_not_found(self, unknown_content):
- # when
- rv = self.client.get(
- '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/'
- 'license/')
+ url = reverse('api-content-license',
+ url_args={'q': 'sha1:%s' % unknown_content['sha1']})
+ rv = self.client.get(url)
- # then
self.assertEqual(rv.status_code, 404)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
'exception': 'NotFoundExc',
'reason': 'No license information found for content '
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.'
+ 'sha1:%s.' % unknown_content['sha1']
})
- mock_service.lookup_content_license.assert_called_once_with(
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03')
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_metadata(self, mock_service):
- # given
- mock_service.lookup_content.return_value = {
- 'checksums': {
- 'blake2s256': '685395c5dc57cada459364f0946d3dd45bad5f'
- 'cbabc1048edb44380f1d31d0aa',
- 'sha1': '40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'sha1_git': 'b4e8f472ffcb01a03875b26e462eb568739f6882',
- 'sha256': '83c0e67cc80f60caf1fcbec2d84b0ccd7968b3be47'
- '35637006560cde9b067a4f',
- },
- 'length': 17,
- 'status': 'visible'
- }
+ @given(content())
+ def test_api_content_metadata(self, content):
- # when
- rv = self.client.get(
- '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/')
+ url = reverse('api-content', {'q': 'sha1:%s' % content['sha1']})
+ rv = self.client.get(url)
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, {
- 'checksums': {
- 'blake2s256': '685395c5dc57cada459364f0946d3dd45bad5f'
- 'cbabc1048edb44380f1d31d0aa',
- 'sha1': '40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03',
- 'sha1_git': 'b4e8f472ffcb01a03875b26e462eb568739f6882',
- 'sha256': '83c0e67cc80f60caf1fcbec2d84b0ccd7968b3be47'
- '35637006560cde9b067a4f',
- },
- 'data_url': '/api/1/content/'
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/raw/',
- 'filetype_url': '/api/1/content/'
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/filetype/',
- 'language_url': '/api/1/content/'
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/language/',
- 'license_url': '/api/1/content/'
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/license/',
- 'length': 17,
- 'status': 'visible'
- })
-
- mock_service.lookup_content.assert_called_once_with(
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03')
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_not_found_as_json(self, mock_service):
- # given
- mock_service.lookup_content.return_value = None
-
- # when
- rv = self.client.get(
- '/api/1/content/sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3'
- 'be4735637006560c/')
-
+ expected_data = self.content_get_metadata(content['sha1'])
+ for key, view_name in (('data_url', 'api-content-raw'),
+ ('license_url', 'api-content-license'),
+ ('language_url', 'api-content-language'),
+ ('filetype_url', 'api-content-filetype')):
+ expected_data[key] = reverse(view_name,
+ url_args={'q': 'sha1:%s' %
+ content['sha1']})
+ self.assertEqual(rv.data, expected_data)
+
+ @given(unknown_content())
+ def test_api_content_not_found_as_json(self, unknown_content):
+
+ url = reverse('api-content',
+ url_args={'q': 'sha1:%s' % unknown_content['sha1']})
+ rv = self.client.get(url)
self.assertEqual(rv.status_code, 404)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
'exception': 'NotFoundExc',
- 'reason': 'Content with sha256:83c0e67cc80f60caf1fcbec2d84b0ccd79'
- '68b3be4735637006560c not found.'
+ 'reason': 'Content with sha1 checksum equals to %s not found!'
+ % unknown_content['sha1']
})
- mock_service.lookup_content.assert_called_once_with(
- 'sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3'
- 'be4735637006560c')
+ @given(unknown_content())
+ def test_api_content_not_found_as_yaml(self, unknown_content):
- @patch('swh.web.api.views.content.service')
- def test_api_content_not_found_as_yaml(self, mock_service):
- # given
- mock_service.lookup_content.return_value = None
-
- # when
- rv = self.client.get(
- '/api/1/content/sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3'
- 'be4735637006560c/',
- HTTP_ACCEPT='application/yaml')
+ url = reverse('api-content',
+ url_args={'q': 'sha256:%s' % unknown_content['sha256']})
+ rv = self.client.get(url, HTTP_ACCEPT='application/yaml')
self.assertEqual(rv.status_code, 404)
self.assertTrue('application/yaml' in rv['Content-Type'])
self.assertEqual(rv.data, {
'exception': 'NotFoundExc',
- 'reason': 'Content with sha256:83c0e67cc80f60caf1fcbec2d84b0ccd79'
- '68b3be4735637006560c not found.'
+ 'reason': 'Content with sha256 checksum equals to %s not found!' %
+ unknown_content['sha256']
})
- mock_service.lookup_content.assert_called_once_with(
- 'sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3'
- 'be4735637006560c')
-
- @patch('swh.web.api.views.content.service')
- def test_api_content_raw_ko_not_found(self, mock_service):
- # given
- mock_service.lookup_content_raw.return_value = None
+ @given(unknown_content())
+ def test_api_content_raw_ko_not_found(self, unknown_content):
- # when
- rv = self.client.get(
- '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03'
- '/raw/')
+ url = reverse('api-content-raw',
+ url_args={'q': 'sha1:%s' % unknown_content['sha1']})
+ rv = self.client.get(url)
self.assertEqual(rv.status_code, 404)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
'exception': 'NotFoundExc',
- 'reason': 'Content sha1:40e71b8614fcd89ccd17ca2b1d9e6'
- '6c5b00a6d03 is not found.'
+ 'reason': 'Content with sha1 checksum equals to %s not found!' %
+ unknown_content['sha1']
})
- mock_service.lookup_content_raw.assert_called_once_with(
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03')
+ @given(content())
+ def test_api_content_raw_text(self, content):
- @patch('swh.web.api.views.content.service')
- def test_api_content_raw_text(self, mock_service):
- # given
- stub_content = {'data': b'some content data'}
- mock_service.lookup_content_raw.return_value = stub_content
+ url = reverse('api-content-raw',
+ url_args={'q': 'sha1:%s' % content['sha1']})
- # when
- rv = self.client.get(
- '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03'
- '/raw/')
+ rv = self.client.get(url)
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/octet-stream')
self.assertEqual(
rv['Content-disposition'],
- 'attachment; filename=content_sha1_'
- '40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03_raw')
+ 'attachment; filename=content_sha1_%s_raw' % content['sha1'])
self.assertEqual(
rv['Content-Type'], 'application/octet-stream')
- self.assertEqual(rv.content, stub_content['data'])
+ expected_data = self.content_get(content['sha1'])
+ self.assertEqual(rv.content, expected_data['data'])
- mock_service.lookup_content_raw.assert_called_once_with(
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03')
+ @given(content())
+ def test_api_content_raw_text_with_filename(self, content):
- @patch('swh.web.api.views.content.service')
- def test_api_content_raw_text_with_filename(self, mock_service):
- # given
- stub_content = {'data': b'some content data'}
- mock_service.lookup_content_raw.return_value = stub_content
-
- # when
- rv = self.client.get(
- '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03'
- '/raw/?filename=filename.txt')
+ url = reverse('api-content-raw',
+ url_args={'q': 'sha1:%s' % content['sha1']},
+ query_params={'filename': 'filename.txt'})
+ rv = self.client.get(url)
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/octet-stream')
@@ -462,117 +291,88 @@
'attachment; filename=filename.txt')
self.assertEqual(
rv['Content-Type'], 'application/octet-stream')
- self.assertEqual(rv.content, stub_content['data'])
-
- mock_service.lookup_content_raw.assert_called_once_with(
- 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03')
+ expected_data = self.content_get(content['sha1'])
+ self.assertEqual(rv.content, expected_data['data'])
- @patch('swh.web.api.views.content.service')
- def test_api_check_content_known(self, mock_service):
- # given
- mock_service.lookup_multiple_hashes.return_value = [
- {'found': True,
- 'filename': None,
- 'sha1': 'sha1:blah'}
- ]
+ @given(content())
+ def test_api_check_content_known(self, content):
- expected_result = {
- 'search_stats': {'nbfiles': 1, 'pct': 100},
- 'search_res': [{'sha1': 'sha1:blah',
- 'found': True}]
- }
-
- # when
- rv = self.client.get('/api/1/content/known/sha1:blah/')
+ url = reverse('api-content-known',
+ url_args={'q': content['sha1']})
+ rv = self.client.get(url)
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, expected_result)
- mock_service.lookup_multiple_hashes.assert_called_once_with(
- [{'filename': None, 'sha1': 'sha1:blah'}])
-
- @patch('swh.web.api.views.content.service')
- def test_api_check_content_known_as_yaml(self, mock_service):
- # given
- mock_service.lookup_multiple_hashes.return_value = [
- {'found': True,
- 'filename': None,
- 'sha1': 'sha1:halb'},
- {'found': False,
- 'filename': None,
- 'sha1': 'sha1_git:hello'}
- ]
-
- expected_result = {
- 'search_stats': {'nbfiles': 2, 'pct': 50},
- 'search_res': [{'sha1': 'sha1:halb',
- 'found': True},
- {'sha1': 'sha1_git:hello',
- 'found': False}]
- }
-
- # when
- rv = self.client.get('/api/1/content/known/sha1:halb,sha1_git:hello/',
- HTTP_ACCEPT='application/yaml')
+
+ self.assertEqual(rv.data, {
+ 'search_res': [
+ {
+ 'found': True,
+ 'sha1': content['sha1']
+ }
+ ],
+ 'search_stats': {'nbfiles': 1, 'pct': 100.0}
+ })
+
+ @given(content())
+ def test_api_check_content_known_as_yaml(self, content):
+
+ url = reverse('api-content-known',
+ url_args={'q': content['sha1']})
+ rv = self.client.get(url, HTTP_ACCEPT='application/yaml')
self.assertEqual(rv.status_code, 200)
- self.assertTrue('application/yaml' in rv['Content-Type'])
- self.assertEqual(rv.data, expected_result)
-
- mock_service.lookup_multiple_hashes.assert_called_once_with(
- [{'filename': None, 'sha1': 'sha1:halb'},
- {'filename': None, 'sha1': 'sha1_git:hello'}])
-
- @patch('swh.web.api.views.content.service')
- def test_api_check_content_known_post_as_yaml(self, mock_service):
- # given
- stub_result = [{'sha1': '7e62b1fe10c88a3eddbba930b156bee2956b2435',
- 'found': True},
- {'filename': 'filepath',
- 'sha1': '8e62b1fe10c88a3eddbba930b156bee2956b2435',
- 'found': True},
- {'filename': 'filename',
- 'sha1': '64025b5d1520c615061842a6ce6a456cad962a3f',
- 'found': False}]
- mock_service.lookup_multiple_hashes.return_value = stub_result
-
- expected_result = {
- 'search_stats': {'nbfiles': 3, 'pct': 2/3 * 100},
- 'search_res': stub_result
- }
-
- # when
+ self.assertEqual(rv['Content-Type'], 'application/yaml')
+
+ self.assertEqual(rv.data, {
+ 'search_res': [
+ {
+ 'found': True,
+ 'sha1': content['sha1']
+ }
+ ],
+ 'search_stats': {'nbfiles': 1, 'pct': 100.0}
+ })
+
+ @given(content())
+ def test_api_check_content_known_post_as_yaml(self, content):
+
+ url = reverse('api-content-known')
rv = self.client.post(
- '/api/1/content/known/search/',
- data=dict(
- q='7e62b1fe10c88a3eddbba930b156bee2956b2435',
- filepath='8e62b1fe10c88a3eddbba930b156bee2956b2435',
- filename='64025b5d1520c615061842a6ce6a456cad962a3f'),
+ url,
+ data={
+ 'q': content['sha1']
+ },
HTTP_ACCEPT='application/yaml'
)
self.assertEqual(rv.status_code, 200)
self.assertTrue('application/yaml' in rv['Content-Type'])
- self.assertEqual(rv.data, expected_result)
-
- @patch('swh.web.api.views.content.service')
- def test_api_check_content_known_not_found(self, mock_service):
- # given
- stub_result = [{'sha1': 'sha1:halb',
- 'found': False}]
- mock_service.lookup_multiple_hashes.return_value = stub_result
+ self.assertEqual(rv.data, {
+ 'search_res': [
+ {
+ 'found': True,
+ 'sha1': content['sha1']
+ }
+ ],
+ 'search_stats': {'nbfiles': 1, 'pct': 100.0}
+ })
- expected_result = {
- 'search_stats': {'nbfiles': 1, 'pct': 0.0},
- 'search_res': stub_result
- }
+ @given(unknown_content())
+ def test_api_check_content_known_not_found(self, unknown_content):
- # when
- rv = self.client.get('/api/1/content/known/sha1:halb/')
+ url = reverse('api-content-known',
+ url_args={'q': unknown_content['sha1']})
+ rv = self.client.get(url)
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, expected_result)
-
- mock_service.lookup_multiple_hashes.assert_called_once_with(
- [{'filename': None, 'sha1': 'sha1:halb'}])
+ self.assertEqual(rv.data, {
+ 'search_res': [
+ {
+ 'found': False,
+ 'sha1': unknown_content['sha1']
+ }
+ ],
+ 'search_stats': {'nbfiles': 1, 'pct': 0.0}
+ })
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mar 17 2025, 6:42 PM (7 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3220832
Attached To
D827: Remove mocks and use hypothesis in api content endpoints tests
Event Timeline
Log In to Comment