Skip to content
Snippets Groups Projects
Commit 6998f365 authored by Bastien Abadie's avatar Bastien Abadie
Browse files

Merge branch 'activities-visibility' into 'master'

Allow guests to see activities statistics

See merge request !1355
parents 246edcab fcf27926
No related branches found
No related tags found
1 merge request!1355Allow guests to see activities statistics
......@@ -1326,7 +1326,8 @@ class UpdateWorkerActivity(GenericAPIView):
)
class CorpusWorkersActivity(CorpusACLMixin, ListAPIView):
"""
Retrieve corpus wise statistics about the activity of all its worker processes
Retrieve corpus wise statistics about the activity of all its worker processes.\n
Requires a **guest** access.
"""
permission_classes = (IsVerified, )
serializer_class = WorkerStatisticsSerializer
......@@ -1334,7 +1335,7 @@ class CorpusWorkersActivity(CorpusACLMixin, ListAPIView):
queryset = WorkerActivity.objects.none()
def list(self, request, *args, **kwargs):
corpus = self.get_corpus(self.kwargs['corpus'], role=Role.Admin)
corpus = self.get_corpus(self.kwargs['corpus'], role=Role.Guest)
# Retrieve the distribution of activities on this corpus grouped by worker version
stats = WorkerActivity.objects \
......@@ -1361,7 +1362,8 @@ class CorpusWorkersActivity(CorpusACLMixin, ListAPIView):
)
class ProcessWorkersActivity(ProcessACLMixin, ListAPIView):
"""
Retrieve process statistics about the activity of its workers
Retrieve process statistics about the activity of its workers.\n
Requires a **guest** access.
"""
permission_classes = (IsVerified, )
serializer_class = WorkerStatisticsSerializer
......
......@@ -57,7 +57,7 @@ class TestWorkersActivity(FixtureAPITestCase):
]
]
def test_version_stats_requires_login(self):
def test_workeractivities_stats_requires_login(self):
with self.assertNumQueries(0):
response = self.client.get(
reverse('api:corpus-workers-activity', kwargs={'corpus': str(self.corpus.id)})
......@@ -65,27 +65,16 @@ class TestWorkersActivity(FixtureAPITestCase):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertDictEqual(response.json(), {'detail': 'Authentication credentials were not provided.'})
def test_version_private_corpus(self):
def test_workeractivities_private_corpus(self):
self.client.force_login(self.user)
with self.assertNumQueries(6):
response = self.client.get(
reverse('api:corpus-workers-activity', kwargs={'corpus': str(self.private_corpus.id)})
)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertDictEqual(response.json(), {'detail': 'You do not have admin access to this corpus.'})
self.assertDictEqual(response.json(), {'detail': 'You do not have guest access to this corpus.'})
def test_version_stats_requires_admin(self):
user = User.objects.create_user('user42@test.test', 'abcd')
self.corpus.memberships.create(user=user, level=Role.Contributor.value)
self.client.force_login(user)
with self.assertNumQueries(5):
response = self.client.get(
reverse('api:corpus-workers-activity', kwargs={'corpus': str(self.corpus.id)})
)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertDictEqual(response.json(), {'detail': 'You do not have admin access to this corpus.'})
def test_versions_unexisting_corpus(self):
def test_workeractivities_unexisting_corpus(self):
self.client.force_login(self.user)
with self.assertNumQueries(3):
response = self.client.get(
......@@ -93,12 +82,13 @@ class TestWorkersActivity(FixtureAPITestCase):
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_versions_empty(self):
def test_workeractivities_empty(self):
"""
Handle a version that has absolutely no results on the corpus
Handle a corpus that has absolutely no activity
A user with a guest access can retrieve statistics
"""
user = User.objects.create_user('user42@test.test', 'abcd')
self.private_corpus.memberships.create(user=user, level=Role.Admin.value)
self.private_corpus.memberships.create(user=user, level=Role.Guest.value)
self.client.force_login(user)
with self.assertNumQueries(6):
response = self.client.get(
......@@ -109,7 +99,7 @@ class TestWorkersActivity(FixtureAPITestCase):
def test_workers_activity_distributed_states(self):
self.client.force_login(self.user)
with self.assertNumQueries(7):
with self.assertNumQueries(4):
response = self.client.get(
reverse('api:corpus-workers-activity', kwargs={'corpus': str(self.corpus.id)})
)
......@@ -138,7 +128,7 @@ class TestWorkersActivity(FixtureAPITestCase):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertDictEqual(response.json(), {'detail': 'Authentication credentials were not provided.'})
def test_process_activity_stats_requires_admin(self):
def test_process_activity_stats_private(self):
self.process.corpus = self.private_corpus
self.process.save()
self.client.force_login(self.user)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment