From 3d045fe1b03eb523b5b36887315a6bc5aed75de1 Mon Sep 17 00:00:00 2001
From: Erwan Rouchet <rouchet@teklia.com>
Date: Tue, 5 Apr 2022 14:32:20 +0200
Subject: [PATCH] Ignore empty elements list in CreateElementsWorkflow

---
 arkindex/dataimport/api.py                    |  6 +-----
 .../dataimport/tests/test_workflows_api.py    | 19 ++++++++++---------
 2 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/arkindex/dataimport/api.py b/arkindex/dataimport/api.py
index 74bbee906a..c9d4654d17 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 80110ed2ea..f298e311c8 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)
-- 
GitLab