From 6431434bde231550a1a7e1e70473dd3c5f11ceb1 Mon Sep 17 00:00:00 2001
From: Erwan Rouchet <rouchet@teklia.com>
Date: Tue, 8 Aug 2023 16:44:59 +0200
Subject: [PATCH] Validate unsupported parameters when starting a dataset
 process

---
 arkindex/process/serializers/imports.py  |  6 +++-
 arkindex/process/tests/test_processes.py | 41 ++++++++++++++----------
 2 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/arkindex/process/serializers/imports.py b/arkindex/process/serializers/imports.py
index 5f1abd0d6b..1795e95d59 100644
--- a/arkindex/process/serializers/imports.py
+++ b/arkindex/process/serializers/imports.py
@@ -344,7 +344,11 @@ class StartProcessSerializer(serializers.Serializer):
             elif not any(dataset.corpus_id == self.instance.corpus.id for dataset in self.instance.datasets.all()):
                 errors['non_field_errors'].append('At least one of the process datasets must be from the same corpus as the process.')
             if validated_data.get('thumbnails'):
-                errors['thumbnails'].append('Thumbnails generation is incompatible with dataset mode processes.')
+                errors['thumbnails'].append('Thumbnails generation is not supported on Dataset processes.')
+            if validated_data.get('worker_activity'):
+                errors['worker_activity'].append('Worker activities are not supported on Dataset processes.')
+            if validated_data.get('use_cache'):
+                errors['use_cache'].append('Caching is not supported on Dataset processes.')
 
         # Use process.worker_runs.all() to access the (prefetched) worker_runs to avoid new SQL queries
         # The related worker versions have also been prefetched
diff --git a/arkindex/process/tests/test_processes.py b/arkindex/process/tests/test_processes.py
index d4c8b255e6..f91f608b81 100644
--- a/arkindex/process/tests/test_processes.py
+++ b/arkindex/process/tests/test_processes.py
@@ -2089,6 +2089,30 @@ class TestProcesses(FixtureAPITestCase):
             'non_field_errors': ['At least one of the process datasets must be from the same corpus as the process.']
         })
 
+    def test_start_process_dataset_unsupported_parameters(self):
+        process2 = self.corpus.processes.create(creator=self.user, mode=ProcessMode.Dataset)
+        process2.datasets.set([self.dataset1, self.private_dataset])
+        process2.worker_runs.create(version=self.recognizer, parents=[], configuration=None)
+
+        self.client.force_login(self.user)
+
+        with self.assertNumQueries(8):
+            response = self.client.post(
+                reverse('api:process-start', kwargs={'pk': str(process2.id)}),
+                {
+                    'thumbnails': True,
+                    'use_cache': True,
+                    'worker_activity': True,
+                }
+            )
+            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+        self.assertDictEqual(response.json(), {
+            'thumbnails': ['Thumbnails generation is not supported on Dataset processes.'],
+            'use_cache': ['Caching is not supported on Dataset processes.'],
+            'worker_activity': ['Worker activities are not supported on Dataset processes.'],
+        })
+
     def test_start_process_dataset(self):
         process2 = self.corpus.processes.create(creator=self.user, mode=ProcessMode.Dataset)
         process2.datasets.set([self.dataset1, self.private_dataset])
@@ -2266,23 +2290,6 @@ class TestProcesses(FixtureAPITestCase):
             f'reco_{str(self.recognizer.id)[:6]}_3'
         ])
 
-    def test_start_process_dataset_no_thumbnails(self):
-        """
-        It is not possible to pass thumbnails when starting a dataset process
-        """
-        process = self.corpus.processes.create(creator=self.user, mode=ProcessMode.Dataset)
-        process.datasets.set([self.dataset1, self.dataset2])
-        # Add a worker run to this process
-        process.worker_runs.create(version=self.recognizer, parents=[], configuration=None)
-
-        self.client.force_login(self.user)
-        response = self.client.post(
-            reverse('api:process-start', kwargs={'pk': str(process.id)}),
-            {'thumbnails': True}
-        )
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-        self.assertDictEqual(response.json(), {'thumbnails': ['Thumbnails generation is incompatible with dataset mode processes.']})
-
     @patch('arkindex.process.models.Process.worker_runs')
     @patch('arkindex.project.triggers.process_tasks.initialize_activity.delay')
     def test_start_process_options_requires_workers(self, activities_delay_mock, worker_runs_mock):
-- 
GitLab