From 46f8b92e076d05c4f9f2bce98de099f8ddcfd7b9 Mon Sep 17 00:00:00 2001 From: Eva Bardou <ebardou@teklia.com> Date: Tue, 8 Sep 2020 07:25:48 +0000 Subject: [PATCH] Add a new filter for creator on ListDataImports endpoint --- arkindex/dataimport/api.py | 15 +++++++++- arkindex/dataimport/tests/test_imports.py | 36 +++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/arkindex/dataimport/api.py b/arkindex/dataimport/api.py index 52975d292e..211e7f82ce 100644 --- a/arkindex/dataimport/api.py +++ b/arkindex/dataimport/api.py @@ -29,7 +29,7 @@ from arkindex.dataimport.serializers.imports import ( ImportTranskribusSerializer ) from arkindex.dataimport.serializers.workers import WorkerSerializer, WorkerVersionSerializer -from arkindex.users.models import OAuthCredentials +from arkindex.users.models import OAuthCredentials, User from arkindex.project.fields import ArrayRemove from arkindex_common.ml_tool import MLTool, MLToolType from arkindex_common.enums import DataImportMode @@ -116,6 +116,19 @@ class DataImportsList(CorpusACLMixin, ListAPIView): 'mode': "Mode '{}' does not exist".format(self.request.query_params['mode']), }) + if 'creator' in self.request.query_params: + try: + user_filters = {'id': int(self.request.query_params['creator'])} + except ValueError: + user_filters = {'email': self.request.query_params['creator']} + + try: + filters['creator'] = User.objects.get(**user_filters) + except User.DoesNotExist: + raise ValidationError({ + 'creator': "User with email or id '{}' does not exist".format(self.request.query_params['creator']), + }) + if 'id' in self.request.query_params: filters['id__startswith'] = self.request.query_params['id'] diff --git a/arkindex/dataimport/tests/test_imports.py b/arkindex/dataimport/tests/test_imports.py index 8555c95789..2daf11a392 100644 --- a/arkindex/dataimport/tests/test_imports.py +++ b/arkindex/dataimport/tests/test_imports.py @@ -4,6 +4,7 @@ from arkindex_common.enums import DataImportMode from arkindex.dataimport.models import DataImport, DataFile from arkindex.documents.models import Corpus from arkindex.project.tests import FixtureAPITestCase +from arkindex.users.models import User from ponos.models import State, Workflow import uuid @@ -139,6 +140,41 @@ class TestImports(FixtureAPITestCase): self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.json(), {'mode': "Mode 'unexisting_mode' does not exist"}) + def test_list_filter_creator_by_email(self): + self.client.force_login(self.user) + self.corpus.imports.create( + creator=User.objects.create_user(email='another_user@user.fr'), + mode=DataImportMode.PDF, + ) + response = self.client.get(reverse('api:import-list'), {'creator': 'user@user.fr', 'with_workflow': False}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertEqual(len(data['results']), 1) + self.assertEqual(data['results'][0]['id'], str(self.dataimport.id)) + + def test_list_filter_creator_by_id(self): + self.client.force_login(self.user) + self.corpus.imports.create( + creator=User.objects.create_user(email='another_user@user.fr'), + mode=DataImportMode.PDF, + ) + response = self.client.get(reverse('api:import-list'), {'creator': self.user.id, 'with_workflow': False}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertEqual(len(data['results']), 1) + self.assertEqual(data['results'][0]['id'], str(self.dataimport.id)) + + def test_list_filter_unexisting_creator(self): + self.client.force_login(self.user) + response = self.client.get(reverse('api:import-list'), {'creator': 'blabla@blabla.fr'}) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.json(), {'creator': "User with email or id 'blabla@blabla.fr' does not exist"}) + + self.client.force_login(self.user) + response = self.client.get(reverse('api:import-list'), {'creator': '5'}) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.json(), {'creator': "User with email or id '5' does not exist"}) + def test_list_filter_id(self): self.client.force_login(self.user) -- GitLab