From 9d1cf983f35d43abb8db2f4c270f9ab8bf346dca Mon Sep 17 00:00:00 2001
From: mlbonhomme <bonhomme@teklia.com>
Date: Wed, 17 May 2023 15:02:45 +0000
Subject: [PATCH] Handle DjangoValidationError in RemoveSelection

---
 arkindex/documents/api/elements.py             | 4 ++++
 arkindex/documents/tests/test_selection_api.py | 6 ++++++
 2 files changed, 10 insertions(+)

diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py
index 03db7dbcd1..a744a3cd9f 100644
--- a/arkindex/documents/api/elements.py
+++ b/arkindex/documents/api/elements.py
@@ -1480,6 +1480,10 @@ class ManageSelection(SelectionMixin, ListAPIView):
     def delete(self, request, *args, **kwargs):
         if request.data.get('id'):
             field = serializers.PrimaryKeyRelatedField(queryset=self.get_selection())
+            try:
+                UUID(request.data['id'])
+            except (ValueError, AttributeError):
+                raise ValidationError({'id': ['Not a valid UUID.']})
             element = field.to_internal_value(request.data['id'])
             request.user.selections.get(element=element).delete()
         elif request.data.get('corpus'):
diff --git a/arkindex/documents/tests/test_selection_api.py b/arkindex/documents/tests/test_selection_api.py
index 3bbe5f6fa8..dbd64e7b8e 100644
--- a/arkindex/documents/tests/test_selection_api.py
+++ b/arkindex/documents/tests/test_selection_api.py
@@ -189,6 +189,12 @@ class TestElementsAPI(FixtureAPITestCase):
         response = self.client.delete(reverse('api:elements-selection'), data={'id': self.page.id})
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
+    def test_delete_not_a_uuid(self):
+        self.client.force_login(self.user)
+        response = self.client.delete(reverse('api:elements-selection'), data={'id': {'id': self.page.id, 'type': 'page'}}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+        self.assertEqual(response.json(), {'id': ['Not a valid UUID.']})
+
     @override_settings(ARKINDEX_FEATURES={'selection': False})
     def test_delete_no_selection(self):
         self.client.force_login(self.user)
-- 
GitLab