From b7c7f689e65f068f9c6c1857fc50c45e0e7efd12 Mon Sep 17 00:00:00 2001 From: Stefan Hammer Date: Tue, 8 Nov 2022 12:14:49 +0100 Subject: [PATCH] Add missing log information for wagtail.schedule.cancel Fixes #9595 --- wagtail/admin/tests/test_audit_log.py | 72 +++++++++++++++++++++++++++ wagtail/models/__init__.py | 1 + wagtail/tests/test_audit_log.py | 16 +++--- 3 files changed, 83 insertions(+), 6 deletions(-) diff --git a/wagtail/admin/tests/test_audit_log.py b/wagtail/admin/tests/test_audit_log.py index 9a2b1216bb..ec50839cdf 100644 --- a/wagtail/admin/tests/test_audit_log.py +++ b/wagtail/admin/tests/test_audit_log.py @@ -1,5 +1,6 @@ from datetime import timedelta +from django.conf import settings from django.contrib.auth.models import Group, Permission from django.test import TestCase from django.urls import reverse @@ -255,3 +256,74 @@ class TestAuditLogAdmin(WagtailTestUtils, TestCase): list(entries), ["wagtail.create", "wagtail.publish", "wagtail.rename", "wagtail.revert"], ) + + def test_page_history_after_unscheduled_publication(self): + # schedule for publishing + go_live_at = timezone.now() + timedelta(minutes=30) + if settings.USE_TZ: + go_live_at = timezone.localtime(go_live_at) + self.hello_page.go_live_at = go_live_at + revision = self.hello_page.save_revision(log_action=True) + revision.publish() + + self.login(user=self.editor) + + response = self.client.post( + reverse( + "wagtailadmin_pages:revisions_unschedule", + args=(self.hello_page.id, revision.id), + ) + ) + history_url = reverse( + "wagtailadmin_pages:history", kwargs={"page_id": self.hello_page.id} + ) + self.assertRedirects( + response, + history_url, + ) + + response = self.client.get(history_url) + self.assertEqual(response.status_code, 200) + self.assertContains( + response, + f"Page unscheduled for publishing at {go_live_at.strftime('%d %b %Y %H:%M')}", + ) + + def test_page_history_after_unscheduled_revision(self): + # Prepare clean live page with revisions + test_page = SimplePage(title="About", slug="about", content="hello") + self.hello_page.add_child(instance=test_page) + revision = test_page.save_revision(log_action=True) + revision.publish() + test_page.refresh_from_db() + + # Schedule a new version for publishing + go_live_at = timezone.now() + timedelta(minutes=30) + if settings.USE_TZ: + go_live_at = timezone.localtime(go_live_at) + test_page.go_live_at = go_live_at + revision = test_page.save_revision(log_action=True) + revision.publish() + + self.login(user=self.editor) + + response = self.client.post( + reverse( + "wagtailadmin_pages:revisions_unschedule", + args=(test_page.id, revision.id), + ) + ) + history_url = reverse( + "wagtailadmin_pages:history", kwargs={"page_id": test_page.id} + ) + self.assertRedirects( + response, + history_url, + ) + + response = self.client.get(history_url) + self.assertEqual(response.status_code, 200) + self.assertContains( + response, + f"Revision {revision.id} from {revision.created_at.strftime('%d %b %Y %H:%M')} unscheduled from publishing at {go_live_at.strftime('%d %b %Y %H:%M')}.", + ) diff --git a/wagtail/models/__init__.py b/wagtail/models/__init__.py index 2af3fe3b5c..13b8712855 100644 --- a/wagtail/models/__init__.py +++ b/wagtail/models/__init__.py @@ -2840,6 +2840,7 @@ class Revision(models.Model): "go_live_at": object.go_live_at.strftime("%d %b %Y %H:%M") if object.go_live_at else None, + "has_live_version": object.live, } }, user=user, diff --git a/wagtail/tests/test_audit_log.py b/wagtail/tests/test_audit_log.py index 30c5bce4f9..ad1351c156 100644 --- a/wagtail/tests/test_audit_log.py +++ b/wagtail/tests/test_audit_log.py @@ -197,21 +197,25 @@ class TestAuditLog(TestCase): ) def test_revision_cancel_schedule(self): + go_live_at = datetime.now() + timedelta(days=1) if settings.USE_TZ: - self.home_page.go_live_at = timezone.make_aware( - datetime.now() + timedelta(days=1) - ) - else: - self.home_page.go_live_at = datetime.now() + timedelta(days=1) + go_live_at = timezone.make_aware(go_live_at) + self.home_page.go_live_at = go_live_at revision = self.home_page.save_revision() revision.publish() revision.approved_go_live_at = None revision.save(update_fields=["approved_go_live_at"]) + log_entries = PageLogEntry.objects.filter(action="wagtail.schedule.cancel") + self.assertEqual(log_entries.count(), 1) + self.assertEqual(log_entries[0].data["revision"]["id"], revision.id) self.assertEqual( - PageLogEntry.objects.filter(action="wagtail.schedule.cancel").count(), 1 + log_entries[0].data["revision"]["go_live_at"], + go_live_at.strftime("%d %b %Y %H:%M"), ) + # The home_page was live already and we've only cancelled the publication of the above revision. + self.assertTrue(log_entries[0].data["revision"]["has_live_version"]) def test_page_lock_unlock(self): self.home_page.save(log_action="wagtail.lock")