Skip to content

Commit

Permalink
Add tests for archival on deletion
Browse files Browse the repository at this point in the history
This also fixes a bug where archives were being written twice on deletion.
  • Loading branch information
willbarton committed Aug 12, 2024
1 parent 45500ee commit 85b1b44
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 9 deletions.
36 changes: 28 additions & 8 deletions cfgov/archival/tests/test_wagtail_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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):
Expand All @@ -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(
Expand Down Expand Up @@ -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
)
8 changes: 7 additions & 1 deletion cfgov/archival/wagtail_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:])
Expand All @@ -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")
Expand Down

0 comments on commit 85b1b44

Please sign in to comment.