From 12d2437f602648b9a0c5a606538a2fb1c196551c Mon Sep 17 00:00:00 2001
From: ml bonhomme <bonhomme@teklia.com>
Date: Mon, 31 Jul 2023 13:00:44 +0000
Subject: [PATCH] Expose process creator in ListProcesses

---
 arkindex/process/api.py                  |  1 +
 arkindex/process/serializers/imports.py  |  5 +++++
 arkindex/process/tests/test_processes.py | 23 +++++++++++++++++++++++
 3 files changed, 29 insertions(+)

diff --git a/arkindex/process/api.py b/arkindex/process/api.py
index 461e1c2a37..d03bcd83b1 100644
--- a/arkindex/process/api.py
+++ b/arkindex/process/api.py
@@ -222,6 +222,7 @@ class ProcessList(ProcessACLMixin, ListAPIView):
 
         qs = (
             self.readable_processes
+            .select_related('creator')
             .filter(filters)
             # Order processes by completion date when available, or start date, or last update
             .annotate(date_order=Coalesce('finished', 'started', 'updated'))
diff --git a/arkindex/process/serializers/imports.py b/arkindex/process/serializers/imports.py
index 8bdd1a9437..5f1abd0d6b 100644
--- a/arkindex/process/serializers/imports.py
+++ b/arkindex/process/serializers/imports.py
@@ -215,6 +215,11 @@ class ProcessDetailsSerializer(ProcessSerializer):
 
 
 class ProcessListSerializer(ProcessLightSerializer):
+    creator = serializers.CharField(
+        source='creator.display_name',
+        read_only=True,
+        help_text='Display name of the user who created the process.',
+    )
 
     class Meta(ProcessLightSerializer.Meta):
         fields = ProcessLightSerializer.Meta.fields + ('created', 'updated', 'started', 'finished')
diff --git a/arkindex/process/tests/test_processes.py b/arkindex/process/tests/test_processes.py
index ba24f8828b..d4c8b255e6 100644
--- a/arkindex/process/tests/test_processes.py
+++ b/arkindex/process/tests/test_processes.py
@@ -122,6 +122,10 @@ class TestProcesses(FixtureAPITestCase):
 
         cls.import_worker_version = WorkerVersion.objects.get(worker__slug='file_import')
 
+    def setUp(self):
+        super().setUp()
+        self.maxDiff = None
+
     def test_list_requires_login(self):
         with self.assertNumQueries(0):
             response = self.client.get(reverse('api:process-list'))
@@ -159,6 +163,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.repository_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Process creator',
                     'updated': self.repository_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -171,6 +176,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.user_img_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.user_img_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -183,6 +189,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.elts_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Process creator',
                     'updated': self.elts_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': self.elts_process.started.isoformat().replace('+00:00', 'Z'),
                     'finished': None,
@@ -195,6 +202,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.training_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.training_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -207,6 +215,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.workers_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.workers_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -244,6 +253,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'ready',
                     'created': self.user_img_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.user_img_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': self.user_img_process.started.isoformat().replace('+00:00', 'Z'),
                     'finished': None,
@@ -277,6 +287,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.training_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.training_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -289,6 +300,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.user_img_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.user_img_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -301,6 +313,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.workers_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.workers_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -366,6 +379,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.local_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.local_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -406,6 +420,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.training_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.training_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -418,6 +433,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.user_img_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.user_img_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -430,6 +446,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.workers_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.workers_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -602,6 +619,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': unscheduled_with_tasks.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': unscheduled_with_tasks.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -627,6 +645,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.training_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.training_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -639,6 +658,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.elts_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Process creator',
                     'updated': self.elts_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -651,6 +671,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.repository_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Process creator',
                     'updated': self.repository_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -663,6 +684,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.user_img_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.user_img_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
@@ -675,6 +697,7 @@ class TestProcesses(FixtureAPITestCase):
                     'state': 'unscheduled',
                     'activity_state': 'disabled',
                     'created': self.workers_process.created.isoformat().replace('+00:00', 'Z'),
+                    'creator': 'Test user',
                     'updated': self.workers_process.updated.isoformat().replace('+00:00', 'Z'),
                     'started': None,
                     'finished': None,
-- 
GitLab