From edf97311e72e8e5df3937843396d3af55be31a28 Mon Sep 17 00:00:00 2001 From: Benjamin Bach Date: Mon, 15 Oct 2018 11:45:50 +0200 Subject: [PATCH 1/3] Fix image deletion issue caused by S3 storage fix --- src/wiki/plugins/images/models.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/wiki/plugins/images/models.py b/src/wiki/plugins/images/models.py index bf0cd9f1c..f25ca1ed9 100644 --- a/src/wiki/plugins/images/models.py +++ b/src/wiki/plugins/images/models.py @@ -110,16 +110,10 @@ def on_image_revision_delete(instance, *args, **kwargs): # Remove image file instance.image.delete(save=False) - - try: - path = instance.image.path.split("/")[:-1] - except NotImplementedError: - # This backend storage doesn't implement 'path' so there is no path to delete - return try: path = instance.image.path.split("/")[:-1] - except NotImplemented: + except NotImplementedError: # This backend storage doesn't implement 'path' so there is no path to delete return From b2cd950298c1edd9a573744362b9ac5095ada6d6 Mon Sep 17 00:00:00 2001 From: Benjamin Bach Date: Mon, 15 Oct 2018 12:25:37 +0200 Subject: [PATCH 2/3] Add test case for soft image delete/restore --- tests/plugins/images/test_views.py | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/plugins/images/test_views.py b/tests/plugins/images/test_views.py index 206191200..aacd46ba8 100644 --- a/tests/plugins/images/test_views.py +++ b/tests/plugins/images/test_views.py @@ -166,6 +166,39 @@ def test_add_revision(self): self.assertEqual(models.Image.objects.count(), 1) self.assertEqual(image.current_revision.previous_revision.revision_number, before_edit_rev) + def test_delete_restore_revision(self): + self._create_test_image(path='') + image = models.Image.objects.get() + before_edit_rev = image.current_revision.revision_number + + response = self.client.get( + reverse('wiki:images_delete', kwargs={ + 'article_id': self.root_article, 'image_id': image.pk, 'path': '', + }), + ) + self.assertRedirects( + response, reverse('wiki:images_index', kwargs={'path': ''}) + ) + image = models.Image.objects.get() + self.assertEqual(models.Image.objects.count(), 1) + self.assertEqual(image.current_revision.previous_revision.revision_number, before_edit_rev) + self.assertTrue(image.current_revision.deleted) + + # RESTORE + before_edit_rev = image.current_revision.revision_number + response = self.client.get( + reverse('wiki:images_restore', kwargs={ + 'article_id': self.root_article, 'image_id': image.pk, 'path': '', + }), + ) + self.assertRedirects( + response, reverse('wiki:images_index', kwargs={'path': ''}) + ) + image = models.Image.objects.get() + self.assertEqual(models.Image.objects.count(), 1) + self.assertEqual(image.current_revision.previous_revision.revision_number, before_edit_rev) + self.assertFalse(image.current_revision.deleted) + @wiki_override_settings(ACCOUNT_HANDLING=True) def test_login_on_revision_add(self): self._create_test_image(path='') From 36c5dd6c1a3de4002d0808f7bf8ebb867706d18b Mon Sep 17 00:00:00 2001 From: Benjamin Bach Date: Mon, 15 Oct 2018 12:31:27 +0200 Subject: [PATCH 3/3] Add test case for hard purge of images --- tests/plugins/images/test_views.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/plugins/images/test_views.py b/tests/plugins/images/test_views.py index aacd46ba8..1888d8bfb 100644 --- a/tests/plugins/images/test_views.py +++ b/tests/plugins/images/test_views.py @@ -1,4 +1,5 @@ import base64 +import os from io import BytesIO from django.core.files.uploadedfile import InMemoryUploadedFile @@ -199,6 +200,29 @@ def test_delete_restore_revision(self): self.assertEqual(image.current_revision.previous_revision.revision_number, before_edit_rev) self.assertFalse(image.current_revision.deleted) + def test_purge(self): + """ + Tests that an image is really purged + """ + self._create_test_image(path='') + image = models.Image.objects.get() + image_revision = image.current_revision.imagerevision + f_path = image_revision.image.file.name + + self.assertTrue(os.path.exists(f_path)) + + response = self.client.post( + reverse('wiki:images_purge', kwargs={ + 'article_id': self.root_article, 'image_id': image.pk, 'path': '', + }), + data={'confirm': True} + ) + self.assertRedirects( + response, reverse('wiki:images_index', kwargs={'path': ''}) + ) + self.assertEqual(models.Image.objects.count(), 0) + self.assertFalse(os.path.exists(f_path)) + @wiki_override_settings(ACCOUNT_HANDLING=True) def test_login_on_revision_add(self): self._create_test_image(path='')