From 4ef171a18b0f9cdbce19196042d6677c603e850b Mon Sep 17 00:00:00 2001 From: mlbonhomme <bonhomme@teklia.com> Date: Tue, 23 Nov 2021 15:32:25 +0000 Subject: [PATCH] add unit test for element dot delete --- .../documents/tests/test_destroy_elements.py | 11 ++++ .../sql_validation/element_dot_delete.sql | 61 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 arkindex/sql_validation/element_dot_delete.sql diff --git a/arkindex/documents/tests/test_destroy_elements.py b/arkindex/documents/tests/test_destroy_elements.py index 2dece9f44a..5348e927cd 100644 --- a/arkindex/documents/tests/test_destroy_elements.py +++ b/arkindex/documents/tests/test_destroy_elements.py @@ -467,3 +467,14 @@ class TestDestroyElements(FixtureAPITestCase): 'user_id': self.user.id, 'description': 'Element deletion', }) + + def test_element_dot_delete(self): + """ + test Element.delete method + """ + self.maxDiff = None + self.client.force_login(self.user) + with self.assertExactQueries('element_dot_delete.sql', params={'id': str(self.vol.id)}): + self.vol.delete() + with self.assertRaises(Element.DoesNotExist): + self.vol.refresh_from_db() diff --git a/arkindex/sql_validation/element_dot_delete.sql b/arkindex/sql_validation/element_dot_delete.sql new file mode 100644 index 0000000000..cb144dc710 --- /dev/null +++ b/arkindex/sql_validation/element_dot_delete.sql @@ -0,0 +1,61 @@ +DELETE FROM documents_transcriptionentity te WHERE transcription_id IN ( + SELECT t.id FROM documents_transcription t + LEFT JOIN documents_elementpath elementpath USING (element_id) + WHERE t.element_id = '{id}'::uuid OR elementpath.path && ARRAY['{id}'::uuid] +) ; + +DELETE FROM documents_transcription +WHERE element_id = '{id}'::uuid +OR element_id IN ( + SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid] +) ; + +DELETE FROM documents_classification +WHERE element_id = '{id}'::uuid +OR element_id IN ( + SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid] +) ; + +DELETE FROM documents_metadata +WHERE element_id = '{id}'::uuid +OR element_id IN ( + SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid] + ) ; + +DELETE FROM dataimport_dataimportelement +WHERE element_id = '{id}'::uuid +OR element_id IN ( + SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid] +) ; + +UPDATE dataimport_dataimport +SET element_id = NULL +WHERE element_id = '{id}'::uuid +OR element_id IN ( + SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid] +) ; + +DELETE FROM documents_selection selection +WHERE element_id = '{id}'::uuid +OR element_id IN ( + SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid] +) ; + +DELETE FROM dataimport_workeractivity +WHERE element_id = '{id}'::uuid +OR element_id IN ( + SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid] +) ; + +WITH children_ids (id) AS ( + DELETE FROM documents_elementpath + WHERE element_id = '{id}'::uuid OR path && ARRAY['{id}'::uuid] + RETURNING element_id +) +DELETE FROM documents_element element +USING children_ids +WHERE element.id = children_ids.id ; + +DELETE +FROM "documents_element" +WHERE "documents_element"."id" = '{id}'::uuid \ No newline at end of file -- GitLab