Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7124150
D828.id2711.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
D828.id2711.diff
View Options
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
Details
Attached
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
Attached To
D828: Remove mocks and use hypothesis in api directory endpoints tests
Event Timeline
Log In to Comment