From 9b87de2512c6e9c05dfb81b71999f662b0e2c497 Mon Sep 17 00:00:00 2001
From: mlbonhomme <bonhomme@teklia.com>
Date: Tue, 10 Dec 2024 14:16:36 +0100
Subject: [PATCH] Return ProcessElements for export mode processes

---
 arkindex/process/models.py                    |  2 +-
 .../process/tests/test_process_elements.py    | 57 +++++++++++--------
 2 files changed, 34 insertions(+), 25 deletions(-)

diff --git a/arkindex/process/models.py b/arkindex/process/models.py
index 3c5eb2eaa7..f6fd0dd8d9 100644
--- a/arkindex/process/models.py
+++ b/arkindex/process/models.py
@@ -370,7 +370,7 @@ class Process(IndexableModel):
         """
         Return a queryset of elements involved in this process
         """
-        if self.mode != ProcessMode.Workers:
+        if self.mode not in [ProcessMode.Workers, ProcessMode.Export]:
             return Element.objects.none()
 
         elements = None
diff --git a/arkindex/process/tests/test_process_elements.py b/arkindex/process/tests/test_process_elements.py
index dc69c9734f..0881b4fe1c 100644
--- a/arkindex/process/tests/test_process_elements.py
+++ b/arkindex/process/tests/test_process_elements.py
@@ -537,13 +537,14 @@ class TestProcessElements(FixtureAPITestCase):
             for element in elements
         ])
 
-    def test_non_workers(self):
+    def test_non_supported_modes(self):
         self.process.load_children = True
         self.client.force_login(self.superuser)
 
-        # Every mode other than Workers never returns elements
+        # Every mode other than Workers and Export never returns elements
         modes = list(ProcessMode)
         modes.remove(ProcessMode.Workers)
+        modes.remove(ProcessMode.Export)
         # Local processes do not have a corpus, causing HTTP 404
         modes.remove(ProcessMode.Local)
 
@@ -576,33 +577,41 @@ class TestProcessElements(FixtureAPITestCase):
             self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
         self.assertEqual(response.json(), {"detail": "No Process matches the given query."})
 
-    def test_workers_mode(self):
-        # The Workers mode returns some elements
+    def test_supported_process_modes(self):
+        """
+        ListProcessElements returns elements when the process is of mode Workers or Export
+        """
+        supported_modes = [ProcessMode.Workers, ProcessMode.Export]
+
         elements = Element.objects.filter(corpus=self.private_corpus).order_by("id")
         # This tests only supports up to 20 elements
         self.assertLessEqual(elements.count(), 20)
-        self.process.corpus = self.private_corpus
-        self.process.load_children = True
-        self.process.save()
-        self.client.force_login(self.superuser)
 
-        with self.assertNumQueries(6):
-            response = self.client.get(reverse("api:process-elements-list", kwargs={"pk": self.process.id}))
-            self.assertEqual(response.status_code, status.HTTP_200_OK)
+        for mode in supported_modes:
+            with self.subTest(mode=mode):
+                self.process.corpus = self.private_corpus
+                self.process.load_children = True
+                self.process.mode = mode
+                self.process.save()
+                self.client.force_login(self.superuser)
 
-        data = response.json()
-        self.assertIsNone(data["count"])
-        self.assertIsNone(data["previous"])
-        self.assertIsNone(data["next"])
-        self.assertListEqual(data["results"], [
-            {
-                "id": str(element.id),
-                "type_id": str(element.type_id),
-                "name": element.name,
-                "confidence": element.confidence,
-            }
-            for element in elements
-        ])
+                with self.assertNumQueries(6):
+                    response = self.client.get(reverse("api:process-elements-list", kwargs={"pk": self.process.id}))
+                    self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+                data = response.json()
+                self.assertIsNone(data["count"])
+                self.assertIsNone(data["previous"])
+                self.assertIsNone(data["next"])
+                self.assertListEqual(data["results"], [
+                    {
+                        "id": str(element.id),
+                        "type_id": str(element.type_id),
+                        "name": element.name,
+                        "confidence": element.confidence,
+                    }
+                    for element in elements
+                ])
 
     def test_list_elements_cursor_pagination(self):
         """
-- 
GitLab