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

Merge branch 'filter-workflows' into 'master'

Filters on workflows list

See merge request !143
parents 642877a0 79a7de40
No related branches found
No related tags found
1 merge request!143Filters on workflows list
......@@ -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