Test publish scheduled pages management command

This commit is contained in:
Serafeim Papastefanos 2014-05-25 22:07:59 +03:00
parent 6bc96665e6
commit 9511b21ea7

View file

@ -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, '<link rel="stylesheet" href="/path/to/my/custom.css">')
self.assertContains(response, '<script src="/path/to/my/custom.js"></script>')
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())