Page MenuHomeSoftware Heritage

D827.diff
No OneTemporary

D827.diff

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

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

Event Timeline