diff --git a/cfgov/archival/tests/test_wagtail_hooks.py b/cfgov/archival/tests/test_wagtail_hooks.py index b1e3a0916d..4d31e558e3 100644 --- a/cfgov/archival/tests/test_wagtail_hooks.py +++ b/cfgov/archival/tests/test_wagtail_hooks.py @@ -2,12 +2,13 @@ from django.apps import apps from django.conf import settings -from django.test import TestCase +from django.test import TestCase, override_settings from django.urls import reverse from wagtail.models import Site from wagtail.test.utils import WagtailTestUtils +from archival.wagtail_hooks import archive_page_data from v1.models import BlogPage @@ -23,6 +24,9 @@ def setUp(self): self.test_page2 = BlogPage(title="test page", slug="test-page2") root_page.add_child(instance=self.test_page2) + self.test_page3 = BlogPage(title="test page", slug="test-page3") + root_page.add_child(instance=self.test_page3) + self.fs = apps.get_app_config("archival").filesystem def test_delete_page(self): @@ -47,10 +51,6 @@ def test_delete_page(self): > 0 ) - # And the page was deleted - with self.assertRaises(BlogPage.DoesNotExist): - self.test_page1.refresh_from_db() - def test_bulk_delete_page(self): self.client.post( reverse( @@ -81,6 +81,26 @@ def test_bulk_delete_page(self): > 0 ) - # And the page was deleted - with self.assertRaises(BlogPage.DoesNotExist): - self.test_page1.refresh_from_db() + def test_delete_page_confirmation(self): + self.client.get( + reverse("wagtailadmin_pages:delete", args=(self.test_page3.pk,)) + ) + self.assertEqual( + self.fs.glob( + os.path.join( + settings.ARCHIVE_DIR, self.test_page3.slug, "*.json" + ) + ) + .count() + .files, + 0, + ) + + @override_settings(ARCHIVE_DIR=None) + def test_delete_page_with_no_archive_dir(self): + archive_page_data(self.test_page3) + + # There should be no test-page3 directory anywhere in the filesystem + self.assertEqual( + self.fs.glob(f"**/{self.test_page3.slug}/").count().directories, 0 + ) diff --git a/cfgov/archival/wagtail_hooks.py b/cfgov/archival/wagtail_hooks.py index 62fe4b7cb0..0407116aa8 100644 --- a/cfgov/archival/wagtail_hooks.py +++ b/cfgov/archival/wagtail_hooks.py @@ -12,6 +12,10 @@ def archive_page_data(page): + # If settings.ARCHIVE_DIR is not set, don't do anything + if getattr(settings, "ARCHIVE_DIR", None) is None: + return + fs = apps.get_app_config("archival").filesystem page_path = unquote(page.specific.url[1:]) @@ -30,7 +34,9 @@ def archive_page_data(page): @hooks.register("before_delete_page") def archive_before_deletion(request, page): """Archive a page before deleting it.""" - archive_page_data(page) + # Only archive once deletion has been confirmed + if request.method == "POST": + archive_page_data(page) @hooks.register("before_bulk_action")