Page MenuHomeSoftware Heritage

D828.id2711.diff
No OneTemporary

D828.id2711.diff

diff --git a/swh/web/tests/api/views/test_directory.py b/swh/web/tests/api/views/test_directory.py
--- a/swh/web/tests/api/views/test_directory.py
+++ b/swh/web/tests/api/views/test_directory.py
@@ -3,120 +3,86 @@
# License: GNU Affero General Public License version 3, or any later version
# See top-level LICENSE file for more information
+import random
+
+from hypothesis import given
from rest_framework.test import APITestCase
-from unittest.mock import patch
+from swh.web.common.utils import reverse
+from swh.web.tests.strategies import directory, unknown_directory
from swh.web.tests.testcase import WebTestCase
class DirectoryApiTestCase(WebTestCase, APITestCase):
- @patch('swh.web.api.views.directory.service')
- def test_api_directory(self, mock_service):
- # given
- stub_directories = [
- {
- 'sha1_git': '18d8be353ed3480476f032475e7c233eff7371d5',
- 'type': 'file',
- 'target': '4568be353ed3480476f032475e7c233eff737123',
- },
- {
- 'sha1_git': '1d518d8be353ed3480476f032475e7c233eff737',
- 'type': 'dir',
- 'target': '8be353ed3480476f032475e7c233eff737123456',
- }]
-
- expected_directories = [
- {
- 'sha1_git': '18d8be353ed3480476f032475e7c233eff7371d5',
- 'type': 'file',
- 'target': '4568be353ed3480476f032475e7c233eff737123',
- 'target_url': '/api/1/content/'
- 'sha1_git:4568be353ed3480476f032475e7c233eff737123/',
- },
- {
- 'sha1_git': '1d518d8be353ed3480476f032475e7c233eff737',
- 'type': 'dir',
- 'target': '8be353ed3480476f032475e7c233eff737123456',
- 'target_url':
- '/api/1/directory/8be353ed3480476f032475e7c233eff737123456/',
- }]
-
- mock_service.lookup_directory.return_value = stub_directories
-
- # when
- rv = self.client.get('/api/1/directory/'
- '18d8be353ed3480476f032475e7c233eff7371d5/')
-
- # then
+ @given(directory())
+ def test_api_directory(self, directory):
+
+ url = reverse('api-directory', url_args={'sha1_git': directory})
+ rv = self.client.get(url)
+
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, expected_directories)
- mock_service.lookup_directory.assert_called_once_with(
- '18d8be353ed3480476f032475e7c233eff7371d5')
+ expected_data = list(map(self._enrich_dir_data,
+ self.directory_ls(directory)))
- @patch('swh.web.api.views.directory.service')
- def test_api_directory_not_found(self, mock_service):
- # given
- mock_service.lookup_directory.return_value = []
+ self.assertEqual(rv.data, expected_data)
- # when
- rv = self.client.get('/api/1/directory/'
- '66618d8be353ed3480476f032475e7c233eff737/')
+ @given(unknown_directory())
+ def test_api_directory_not_found(self, unknown_directory):
+
+ url = reverse('api-directory',
+ url_args={'sha1_git': unknown_directory})
+ 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': 'Directory with sha1_git '
- '66618d8be353ed3480476f032475e7c233eff737 not found.'})
-
- @patch('swh.web.api.views.directory.service')
- def test_api_directory_with_path_found(self, mock_service):
- # given
- expected_dir = {
- 'sha1_git': '18d8be353ed3480476f032475e7c233eff7371d5',
- 'type': 'file',
- 'name': 'bla',
- 'target': '4568be353ed3480476f032475e7c233eff737123',
- 'target_url': '/api/1/content/'
- 'sha1_git:4568be353ed3480476f032475e7c233eff737123/',
- }
-
- mock_service.lookup_directory_with_path.return_value = expected_dir
-
- # when
- rv = self.client.get('/api/1/directory/'
- '18d8be353ed3480476f032475e7c233eff7371d5/bla/')
-
- # then
+ 'reason': 'Directory with sha1_git %s not found'
+ % unknown_directory})
+
+ @given(directory())
+ def test_api_directory_with_path_found(self, directory):
+
+ directory_content = self.directory_ls(directory)
+ path = random.choice(directory_content)
+
+ url = reverse('api-directory',
+ url_args={'sha1_git': directory,
+ 'path': path['name']})
+ rv = self.client.get(url)
+
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv['Content-Type'], 'application/json')
- self.assertEqual(rv.data, expected_dir)
-
- mock_service.lookup_directory_with_path.assert_called_once_with(
- '18d8be353ed3480476f032475e7c233eff7371d5', 'bla')
+ self.assertEqual(rv.data, self._enrich_dir_data(path))
- @patch('swh.web.api.views.directory.service')
- def test_api_directory_with_path_not_found(self, mock_service):
- # given
- mock_service.lookup_directory_with_path.return_value = None
- path = 'some/path/to/dir/'
+ @given(directory())
+ def test_api_directory_with_path_not_found(self, directory):
- # when
- rv = self.client.get(('/api/1/directory/'
- '66618d8be353ed3480476f032475e7c233eff737/%s')
- % path)
- path = path.strip('/') # Path stripped of lead/trail separators
+ path = 'some/path/to/nonexistent/dir/'
+ url = reverse('api-directory',
+ url_args={'sha1_git': directory,
+ 'path': path})
+ 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': (('Entry with path %s relative to '
- 'directory with sha1_git '
- '66618d8be353ed3480476f032475e7c233eff737 not found.')
- % path)})
+ 'reason': ('Directory entry with path %s from %s not found'
+ % (path, directory))})
+
+ @classmethod
+ def _enrich_dir_data(cls, dir_data):
+ if dir_data['type'] == 'file':
+ dir_data['target_url'] = \
+ reverse('api-content',
+ url_args={'q': 'sha1_git:%s' % dir_data['target']})
+ else:
+ dir_data['target_url'] = \
+ reverse('api-directory',
+ url_args={'sha1_git': dir_data['target']})
+
+ return dir_data

File Metadata

Mime Type
text/plain
Expires
Dec 20 2024, 7:32 PM (11 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3220836

Event Timeline