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())
+
+