Skip to content
Snippets Groups Projects
Commit 79a7de40 authored by Erwan Rouchet's avatar Erwan Rouchet Committed by Bastien Abadie
Browse files

Filters on workflows list

parent 642877a0
No related branches found
No related tags found
No related merge requests found
......@@ -37,11 +37,29 @@ class DataImportsList(CorpusACLMixin, ListAPIView):
serializer_class = DataImportLightSerializer
def get_queryset(self):
filters = {
'corpus__in': Corpus.objects.readable(self.request.user)
}
if 'corpus' in self.request.query_params:
return DataImport.objects.filter(
corpus=self.get_corpus(self.request.query_params['corpus'])
)
return DataImport.objects.filter(corpus__in=Corpus.objects.readable(self.request.user))
filters['corpus'] = self.get_corpus(self.request.query_params['corpus'])
if 'state' in self.request.query_params:
try:
filters['state'] = DataImportState(self.request.query_params['state'])
except ValueError:
raise ValidationError("State '{}' does not exist".format(self.request.query_params['state']))
if 'mode' in self.request.query_params:
try:
filters['mode'] = DataImportMode(self.request.query_params['mode'])
except ValueError:
raise ValidationError("Mode '{}' does not exist".format(self.request.query_params['mode']))
if 'id' in self.request.query_params:
filters['id__startswith'] = self.request.query_params['id']
return DataImport.objects.filter(**filters)
class DataImportDetails(CorpusACLMixin, RetrieveDestroyAPIView):
......
......@@ -2,8 +2,9 @@ from rest_framework import status
from django.urls import reverse
from arkindex.dataimport.models import \
DataImport, DataImportMode, DataImportState, DataImportFailure, DataFile
from arkindex.documents.models import Element, ElementType
from arkindex.documents.models import Element, ElementType, Corpus
from arkindex.project.tests import RedisMockMixin, FixtureAPITestCase
import uuid
class TestImports(RedisMockMixin, FixtureAPITestCase):
......@@ -25,8 +26,7 @@ class TestImports(RedisMockMixin, FixtureAPITestCase):
def setUp(self):
super().setUp()
self.dataimport = DataImport.objects.create(
creator=self.user, corpus=self.corpus, mode=DataImportMode.Images)
self.dataimport = self.corpus.imports.create(creator=self.user, mode=DataImportMode.Images)
def test_list_requires_login(self):
response = self.client.get(reverse('api:import-list'))
......@@ -44,6 +44,61 @@ class TestImports(RedisMockMixin, FixtureAPITestCase):
self.assertEqual(result['mode'], DataImportMode.Images.value)
self.assertEqual(result['corpus'], str(self.corpus.id))
def test_list_filter_corpus(self):
self.client.force_login(self.superuser)
corpus2 = Corpus.objects.create(name='Another corpus', description='something')
dataimport2 = corpus2.imports.create(creator=self.user, mode=DataImportMode.Images)
response = self.client.get(reverse('api:import-list'), {'corpus': str(corpus2.id)})
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(dataimport2.id))
def test_list_filter_state(self):
self.client.force_login(self.user)
dataimport2 = self.corpus.imports.create(
creator=self.user,
mode=DataImportMode.Images,
state=DataImportState.Configured,
)
response = self.client.get(reverse('api:import-list'), {'state': DataImportState.Configured.value})
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(dataimport2.id))
def test_list_filter_mode(self):
self.client.force_login(self.user)
dataimport2 = self.corpus.imports.create(
creator=self.user,
mode=DataImportMode.PDF,
)
response = self.client.get(reverse('api:import-list'), {'mode': DataImportMode.PDF.value})
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(dataimport2.id))
def test_list_filter_id(self):
self.client.force_login(self.user)
# Generate a UUID whose first characters are not the same as the first DataImport
dataimport_id = str(uuid.uuid4())
while dataimport_id[:10] == str(self.dataimport.id)[:10]:
dataimport_id = str(uuid.uuid4())
dataimport2 = self.corpus.imports.create(
id=dataimport_id,
creator=self.user,
mode=DataImportMode.Images,
)
response = self.client.get(reverse('api:import-list'), {'id': dataimport_id[:10]})
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(dataimport2.id))
def test_details_requires_login(self):
response = self.client.get(reverse('api:import-details', kwargs={'pk': self.dataimport.id}))
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
......
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