From 9511b21ea73cf86958c8221eec212bd04c18198d Mon Sep 17 00:00:00 2001 From: Serafeim Papastefanos Date: Sun, 25 May 2014 22:07:59 +0300 Subject: [PATCH] Test publish scheduled pages management command --- wagtail/wagtailadmin/tests.py | 154 +++++++++++++++++++++++++++++++++- 1 file changed, 151 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/tests.py b/wagtail/wagtailadmin/tests.py index 3df92ec22..04bf38f76 100644 --- a/wagtail/wagtailadmin/tests.py +++ b/wagtail/wagtailadmin/tests.py @@ -1,11 +1,13 @@ from datetime import datetime, timedelta +from django.core import management +from django.core.urlresolvers import reverse from django.utils import timezone from django.test import TestCase import unittest +from StringIO import StringIO from wagtail.tests.models import SimplePage, EventPage from wagtail.tests.utils import login from wagtail.wagtailcore.models import Page, PageRevision -from django.core.urlresolvers import reverse class TestHome(TestCase): @@ -127,7 +129,7 @@ class TestPageCreation(TestCase): # No revisions with approved_go_live_datetime self.assertFalse(PageRevision.objects.filter(page=page).exclude(approved_go_live_datetime__isnull=True).exists()) - def test_create_simplepage_scheduled_errored(self): + def test_create_simplepage_scheduled_go_live_before_expiry(self): post_data = { 'title': "New page!", 'content': "Some content", @@ -141,6 +143,7 @@ class TestPageCreation(TestCase): self.assertEqual(response.status_code, 200) self.assertTrue(response.context['edit_handler'].form.errors) + def test_create_simplepage_scheduled_expire_in_the_past(self): post_data = { 'title': "New page!", 'content': "Some content", @@ -337,9 +340,51 @@ class TestPageEdit(TestCase): child_page_new = SimplePage.objects.get(id=self.child_page.id) # The page should not be live anymore self.assertFalse(child_page_new.live) - # Instead a revision with approved_go_live_datetime should not exist + # Instead a revision with approved_go_live_datetime should now exist self.assertTrue(PageRevision.objects.filter(page=child_page_new).exclude(approved_go_live_datetime__isnull=True).exists()) + def test_edit_post_publish_now_an_already_scheduled(self): + # First let's publish a page with a go_live_datetime in the future + go_live_datetime = timezone.now() + timedelta(days=1) + expiry_datetime = timezone.now() + timedelta(days=2) + post_data = { + 'title': "I've been edited!", + 'content': "Some content", + 'slug': 'hello-world', + 'action-publish': "Publish", + 'go_live_datetime': str(go_live_datetime), + 'expiry_datetime': str(expiry_datetime), + } + response = self.client.post(reverse('wagtailadmin_pages_edit', args=(self.child_page.id, )), post_data) + + # Should be redirected to explorer page + self.assertEqual(response.status_code, 302) + + child_page_new = SimplePage.objects.get(id=self.child_page.id) + # The page should not be live anymore + self.assertFalse(child_page_new.live) + # Instead a revision with approved_go_live_datetime should now exist + self.assertTrue(PageRevision.objects.filter(page=child_page_new).exclude(approved_go_live_datetime__isnull=True).exists()) + + # Now, let's edit it and publish it right now + go_live_datetime = timezone.now() + post_data = { + 'title': "I've been edited!", + 'content': "Some content", + 'slug': 'hello-world', + 'action-publish': "Publish", + 'go_live_datetime': "", + } + response = self.client.post(reverse('wagtailadmin_pages_edit', args=(self.child_page.id, )), post_data) + + # Should be redirected to explorer page + self.assertEqual(response.status_code, 302) + + child_page_new = SimplePage.objects.get(id=self.child_page.id) + # The page should be live now + self.assertTrue(child_page_new.live) + # And a revision with approved_go_live_datetime should not exist + self.assertFalse(PageRevision.objects.filter(page=child_page_new).exclude(approved_go_live_datetime__isnull=True).exists()) class TestPageDelete(TestCase): def setUp(self): @@ -454,3 +499,106 @@ class TestEditorHooks(TestCase): self.assertEqual(response.status_code, 200) self.assertContains(response, '') self.assertContains(response, '') + +class TestPublishScheduledPages(TestCase): + def setUp(self): + # Find root page + self.root_page = Page.objects.get(id=2) + + def test_go_live_page_will_be_published(self): + page = SimplePage() + page.title = "Hello world!" + page.slug = "hello-world" + page.live = False + page.go_live_datetime = timezone.now() - timedelta(days=1) + self.root_page.add_child(page) + + page.save_revision( + approved_go_live_datetime = timezone.now() - timedelta(days=1) + ) + p = Page.objects.get(slug='hello-world') + self.assertFalse(p.live) + self.assertTrue(PageRevision.objects.filter(page=p).exclude(approved_go_live_datetime__isnull=True).exists()) + management.call_command('publish_scheduled_pages', verbosity=3, interactive=False) + #management.call_command('publish_scheduled_pages', dryrun=True, verbosity=3, interactive=False) + p = Page.objects.get(slug='hello-world') + self.assertTrue(p.live) + self.assertFalse(PageRevision.objects.filter(page=p).exclude(approved_go_live_datetime__isnull=True).exists()) + + def test_go_live_page_will_be_published(self): + page = SimplePage() + page.title = "Hello world!" + page.slug = "hello-world" + page.live = False + page.go_live_datetime = timezone.now() - timedelta(days=1) + self.root_page.add_child(page) + + page.save_revision(approved_go_live_datetime = timezone.now() - timedelta(days=1)) + p = Page.objects.get(slug='hello-world') + self.assertFalse(p.live) + self.assertTrue(PageRevision.objects.filter(page=p).exclude(approved_go_live_datetime__isnull=True).exists()) + management.call_command('publish_scheduled_pages', ) + p = Page.objects.get(slug='hello-world') + self.assertTrue(p.live) + self.assertFalse(PageRevision.objects.filter(page=p).exclude(approved_go_live_datetime__isnull=True).exists()) + + def test_future_go_live_page_will_not_be_published(self): + page = SimplePage() + page.title = "Hello world!" + page.slug = "hello-world" + page.live = False + page.go_live_datetime = timezone.now() + timedelta(days=1) + self.root_page.add_child(page) + page.save_revision(approved_go_live_datetime = timezone.now() - timedelta(days=1)) + p = Page.objects.get(slug='hello-world') + self.assertFalse(p.live) + self.assertTrue(PageRevision.objects.filter(page=p).exclude(approved_go_live_datetime__isnull=True).exists()) + management.call_command('publish_scheduled_pages', ) + p = Page.objects.get(slug='hello-world') + self.assertFalse(p.live) + self.assertTrue(PageRevision.objects.filter(page=p).exclude(approved_go_live_datetime__isnull=True).exists()) + + def test_expired_page_will_be_unpublished(self): + page = SimplePage() + page.title = "Hello world!" + page.slug = "hello-world" + page.live = True + page.expiry_datetime = timezone.now() - timedelta(days=1) + self.root_page.add_child(page) + p = Page.objects.get(slug='hello-world') + self.assertTrue(p.live) + management.call_command('publish_scheduled_pages', ) + p = Page.objects.get(slug='hello-world') + self.assertFalse(p.live) + self.assertTrue(p.expired) + + def test_future_expired_page_will_not_be_unpublished(self): + page = SimplePage() + page.title = "Hello world!" + page.slug = "hello-world" + page.live = True + page.expiry_datetime = timezone.now() + timedelta(days=1) + self.root_page.add_child(page) + p = Page.objects.get(slug='hello-world') + self.assertTrue(p.live) + management.call_command('publish_scheduled_pages', ) + p = Page.objects.get(slug='hello-world') + self.assertTrue(p.live) + self.assertFalse(p.expired) + + def test_expired_pages_are_dropped_from_mod_queue(self): + page = SimplePage() + page.title = "Hello world!" + page.slug = "hello-world" + page.live = False + page.expiry_datetime = timezone.now() - timedelta(days=1) + self.root_page.add_child(page) + page.save_revision(submitted_for_moderation = True) + p = Page.objects.get(slug='hello-world') + self.assertFalse(p.live) + self.assertTrue(PageRevision.objects.filter(page=p, submitted_for_moderation=True).exists()) + management.call_command('publish_scheduled_pages', ) + p = Page.objects.get(slug='hello-world') + self.assertFalse(PageRevision.objects.filter(page=p, submitted_for_moderation=True).exists()) + +