diff --git a/arkindex/dataimport/api.py b/arkindex/dataimport/api.py index 74bbee906aab91889f9de707d5598298038213a0..c9d4654d1748d8278369c081e46441663c7ae944 100644 --- a/arkindex/dataimport/api.py +++ b/arkindex/dataimport/api.py @@ -431,7 +431,7 @@ class CorpusWorkflow(SelectionMixin, CorpusACLMixin, CreateAPIView): use_cache=use_cache, ) - # Ensure process elements do exists + # Ensure process elements do exist if selection: elements = self.get_selection(corpus.id) if not elements.exists(): @@ -439,10 +439,6 @@ class CorpusWorkflow(SelectionMixin, CorpusACLMixin, CreateAPIView): '__all__': ['No element match those filters.'] }) process.elements.set(elements) - elif not process.list_elements().exists(): - raise ValidationError({ - '__all__': ['No element match those filters.'] - }) return Response( status=status.HTTP_201_CREATED, diff --git a/arkindex/dataimport/tests/test_workflows_api.py b/arkindex/dataimport/tests/test_workflows_api.py index 80110ed2eaf96331b7fab8d21527f2d0b5463af1..f298e311c84320afab902ba7a486edaddc44dc44 100644 --- a/arkindex/dataimport/tests/test_workflows_api.py +++ b/arkindex/dataimport/tests/test_workflows_api.py @@ -267,8 +267,11 @@ class TestWorkflows(FixtureAPITestCase): self.assertEqual(dataimport.element_type.slug, 'volume') def test_create_element_workflow_empty_queryset(self): + """ + An empty QuerySet is ignored: the user can change the element filtering later, + and running a process on no elements at all is harmless. + """ self.client.force_login(self.user) - process_count = DataImport.objects.count() response = self.client.post( reverse('api:corpus-workflow'), { @@ -278,15 +281,13 @@ class TestWorkflows(FixtureAPITestCase): }, format='json' ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) data = response.json() - self.assertIn('__all__', data) - self.assertListEqual( - data['__all__'], - ['No element match those filters.'] - ) - # Ensure the process creation is atomic when elements count test fail - self.assertEqual(DataImport.objects.count(), process_count) + dataimport = DataImport.objects.get(id=data['id']) + self.assertEqual(dataimport.corpus, self.corpus) + self.assertEqual(dataimport.element_type.slug, 'volume') + self.assertEqual(dataimport.name_contains, 'ahahah') + self.assertFalse(dataimport.list_elements().exists()) def test_create_element_workflow_empty_selection(self): self.client.force_login(self.user)