From 3ff90ed9052db7b5ac2087901b30cf4f300be105 Mon Sep 17 00:00:00 2001
From: mlbonhomme <bonhomme@teklia.com>
Date: Mon, 17 Jul 2023 08:48:11 +0000
Subject: [PATCH] Rename CreateElementsWorkflow to CreateProcess

---
 arkindex/process/api.py                       |  8 +-
 arkindex/process/serializers/imports.py       |  2 +-
 ...ent_workflow.py => test_create_process.py} | 84 +++++++++----------
 arkindex/project/api_v1.py                    |  4 +-
 4 files changed, 49 insertions(+), 49 deletions(-)
 rename arkindex/process/tests/{test_element_workflow.py => test_create_process.py} (93%)

diff --git a/arkindex/process/api.py b/arkindex/process/api.py
index c6edfe6ab2..271ba8c602 100644
--- a/arkindex/process/api.py
+++ b/arkindex/process/api.py
@@ -65,9 +65,9 @@ from arkindex.process.serializers.files import DataFileCreateSerializer, DataFil
 from arkindex.process.serializers.git import ExternalRepositorySerializer, RevisionSerializer
 from arkindex.process.serializers.imports import (
     ApplyProcessTemplateSerializer,
+    CorpusProcessSerializer,
     CreateImportTranskribusErrorResponseSerializer,
     CreateProcessTemplateSerializer,
-    ElementsWorkflowSerializer,
     FilesProcessSerializer,
     ImportTranskribusSerializer,
     ProcessDetailsSerializer,
@@ -473,18 +473,18 @@ class FilesProcess(CreateAPIView):
 
 @extend_schema_view(
     post=extend_schema(
-        operation_id='CreateElementsWorkflow',
+        operation_id='CreateProcess',
         tags=['process'],
         responses={201: ProcessSerializer},
     )
 )
-class CorpusWorkflow(SelectionMixin, CorpusACLMixin, CreateAPIView):
+class CorpusProcess(SelectionMixin, CorpusACLMixin, CreateAPIView):
     """
     Create a distributed process from elements of an Arkindex corpus.\n\n
     Requires an **admin** access to the corpus.
     """
     permission_classes = (IsVerified, )
-    serializer_class = ElementsWorkflowSerializer
+    serializer_class = CorpusProcessSerializer
 
     @transaction.atomic
     def create(self, request, pk=None, **kwargs):
diff --git a/arkindex/process/serializers/imports.py b/arkindex/process/serializers/imports.py
index ef86b9300a..a26ffd702c 100644
--- a/arkindex/process/serializers/imports.py
+++ b/arkindex/process/serializers/imports.py
@@ -462,7 +462,7 @@ class ApplyProcessTemplateSerializer(ProcessACLMixin, serializers.Serializer):
         return data
 
 
-class ElementsWorkflowSerializer(serializers.Serializer):
+class CorpusProcessSerializer(serializers.Serializer):
     # TODO: Rewrite this as a ModelSerializer and merge the validation code from the API into it
 
     corpus = serializers.UUIDField()
diff --git a/arkindex/process/tests/test_element_workflow.py b/arkindex/process/tests/test_create_process.py
similarity index 93%
rename from arkindex/process/tests/test_element_workflow.py
rename to arkindex/process/tests/test_create_process.py
index be9e4928ce..99d17d6ec1 100644
--- a/arkindex/process/tests/test_element_workflow.py
+++ b/arkindex/process/tests/test_create_process.py
@@ -13,9 +13,9 @@ from arkindex.project.tests import FixtureAPITestCase
 from arkindex.users.models import Role
 
 
-class TestCreateElementsWorkflow(FixtureAPITestCase):
+class TestCreateProcess(FixtureAPITestCase):
     """
-    Test creating Workers processes with CreateElementsWorkflow
+    Test creating Workers processes with CreateProcess
     """
 
     @classmethod
@@ -52,11 +52,11 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         ARKINDEX_TASKS_IMAGE='tasks:latest',
         PONOS_DEFAULT_ENV={'env': {'SOME_VAR': 'somevalue'}}
     )
-    def test_page_workflow(self):
+    def test_page_process(self):
         self.client.force_login(self.user)
 
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element_type': 'page',
@@ -108,10 +108,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.assertEqual(init_task.image, 'tasks:latest')
         self.assertEqual(init_task.command, f'python -m arkindex_tasks.init_elements {process.id} --chunks-number 1')
 
-    def test_volume_workflow(self):
+    def test_volume_process(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element': str(self.volume.id),
@@ -151,10 +151,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             'test_folder_id': None,
         })
 
-    def test_single_page_workflow(self):
+    def test_single_page_process(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element': str(self.pages.first().id),
@@ -167,27 +167,27 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         process = Process.objects.get(id=data['id'])
         self.assertEqual(process.element, self.pages.first())
 
-    def test_create_element_workflow_requires_login(self):
-        response = self.client.post(reverse('api:corpus-workflow'), {}, format='json')
+    def test_create_process_requires_login(self):
+        response = self.client.post(reverse('api:corpus-process'), {}, format='json')
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
 
-    def test_create_element_workflow_required_fields(self):
+    def test_create_process_required_fields(self):
         self.client.force_login(self.user)
-        response = self.client.post(reverse('api:corpus-workflow'), {}, format='json')
+        response = self.client.post(reverse('api:corpus-process'), {}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertDictEqual(
             response.json(),
             {'corpus': ['This field is required.']}
         )
 
-    def test_create_element_workflow_requires_corpus_admin(self):
+    def test_create_process_requires_corpus_admin(self):
         """
         Only an admin of the target corpus can create a workers process
         """
         self.client.force_login(self.user)
         self.corpus.memberships.filter(user=self.user).update(level=Role.Contributor.value)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'name': 'Test',
@@ -197,10 +197,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertDictEqual(response.json(), {'corpus': ['You do not have an admin access to this corpus.']})
 
-    def test_create_element_workflow_non_readable_corpus(self):
+    def test_create_process_non_readable_corpus(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.private_corpus.id),
                 'name': 'Test',
@@ -210,10 +210,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertDictEqual(response.json(), {'corpus': ['Corpus with this ID does not exist.']})
 
-    def test_create_element_workflow_name_filter(self):
+    def test_create_process_name_filter(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element_name_contains': self.pages.first().name[2:5],
@@ -225,10 +225,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         process = Process.objects.get(id=data['id'])
         self.assertEqual(process.name_contains, self.pages.first().name[2:5])
 
-    def test_create_element_workflow_fields_max_length(self):
+    def test_create_process_fields_max_length(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'name': 'A' * 200,
@@ -244,10 +244,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             'element_type': ['Ensure this field has no more than 50 characters.'],
         })
 
-    def test_create_element_workflow_type_filter(self):
+    def test_create_process_type_filter(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element_type': 'volume',
@@ -259,14 +259,14 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         process = Process.objects.get(id=data['id'])
         self.assertEqual(process.element_type.slug, 'volume')
 
-    def test_create_element_workflow_empty_queryset(self):
+    def test_create_process_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)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element_type': 'volume',
@@ -282,10 +282,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.assertEqual(process.name_contains, 'ahahah')
         self.assertFalse(process.list_elements().exists())
 
-    def test_create_element_workflow_empty_selection(self):
+    def test_create_process_empty_selection(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'selection': True,
@@ -303,10 +303,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             ['No element match those filters.']
         )
 
-    def test_create_element_workflow_wrong_type(self):
+    def test_create_process_wrong_type(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element_type': 'arachnid',
@@ -318,13 +318,13 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             'element_type': ['This type does not exist in corpus "Unit Tests"']
         })
 
-    def test_create_element_workflow_mixed_element_filters(self):
+    def test_create_process_mixed_element_filters(self):
         """
         Element parameter can be set with filtering parameters
         """
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element': str(self.pages.first().id),
@@ -338,7 +338,7 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.client.force_login(self.user)
         with self.assertNumQueries(12):
             response = self.client.post(
-                reverse('api:corpus-workflow'),
+                reverse('api:corpus-process'),
                 {
                     'corpus': str(self.corpus.id),
                     'ml_class_id': str(self.ml_class.id),
@@ -372,7 +372,7 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             'test_folder_id': None,
         })
 
-    def test_create_element_workflow_non_folder_no_zone(self):
+    def test_create_process_non_folder_no_zone(self):
         """
         An element that is not of a folder type and has no image or polygon
         should still be usable to create a process
@@ -381,7 +381,7 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         element = self.corpus.elements.create(type=self.pages.first().type, name='Kill me please')
         with self.assertNumQueries(13):
             response = self.client.post(
-                reverse('api:corpus-workflow'),
+                reverse('api:corpus-process'),
                 {
                     'corpus': str(self.corpus.id),
                     'element': str(element.id),
@@ -428,13 +428,13 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             'test_folder_id': None,
         })
 
-    def test_create_element_workflow_mixed_selection_filters(self):
+    def test_create_process_mixed_selection_filters(self):
         """
         Element and selection fields cannot be set together
         """
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element': str(self.volume.id),
@@ -451,7 +451,7 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             }
         )
 
-    def test_create_element_workflow_selection_filter(self):
+    def test_create_process_selection_filter(self):
         self.client.force_login(self.user)
         page = self.pages.first()
         self.client.post(
@@ -460,7 +460,7 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
             format='json'
         )
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'selection': True,
@@ -492,10 +492,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.assertEqual(data['results'][0]['id'], str(page.id))
 
     @override_settings(ARKINDEX_FEATURES={'selection': False})
-    def test_create_element_workflow_selection_no_selection(self):
+    def test_create_process_selection_no_selection(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'selection': True,
@@ -505,10 +505,10 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertDictEqual(response.json(), {'selection': ['Selection is not available on this instance.']})
 
-    def test_create_element_workflow_process_name(self):
+    def test_create_process_process_name(self):
         self.client.force_login(self.user)
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'name': 'blah',
@@ -528,7 +528,7 @@ class TestCreateElementsWorkflow(FixtureAPITestCase):
         self.client.force_login(self.user)
         corpus_type = self.corpus.types.first()
         response = self.client.post(
-            reverse('api:corpus-workflow'),
+            reverse('api:corpus-process'),
             {
                 'corpus': str(self.corpus.id),
                 'element_type': corpus_type.slug,
diff --git a/arkindex/project/api_v1.py b/arkindex/project/api_v1.py
index 91a4ff189a..a315d4ae3f 100644
--- a/arkindex/project/api_v1.py
+++ b/arkindex/project/api_v1.py
@@ -80,9 +80,9 @@ from arkindex.process.api import (
     AvailableRepositoriesList,
     BucketList,
     ClearProcess,
+    CorpusProcess,
     CorpusWorkersActivity,
     CorpusWorkerVersionList,
-    CorpusWorkflow,
     CreateDockerWorkerVersion,
     CreateProcessTemplate,
     DataFileCreate,
@@ -279,7 +279,7 @@ api = [
     path('process/files/<uuid:pk>/', DataFileList.as_view(), name='file-list'),
     path('process/files/create/', DataFileCreate.as_view(), name='file-create'),
     path('process/file/<uuid:pk>/', DataFileRetrieve.as_view(), name='file-retrieve'),
-    path('process/corpus/', CorpusWorkflow.as_view(), name='corpus-workflow'),
+    path('process/corpus/', CorpusProcess.as_view(), name='corpus-process'),
     path('process/<uuid:pk>/workers/', WorkerRunList.as_view(), name='worker-run-list'),
     path('process/workers/<uuid:pk>/', WorkerRunDetails.as_view(), name='worker-run-details'),
     path('process/<uuid:pk>/elements/', ListProcessElements.as_view(), name='process-elements-list'),
-- 
GitLab