mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-04-16 13:01:01 +00:00
commit
adee0b5cf6
7 changed files with 1041 additions and 302 deletions
11
wagtail/tests/templates/tests/simple_page.html
Normal file
11
wagtail/tests/templates/tests/simple_page.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{% load pageurl %}
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ self.title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>{{ self.title }}</h1>
|
||||
<h2>Simple page</h2>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -14,7 +14,9 @@ except ImportError:
|
|||
|
||||
def login(client):
|
||||
# Create a user
|
||||
User.objects.create_superuser(username='test', email='test@email.com', password='password')
|
||||
user = User.objects.create_superuser(username='test', email='test@email.com', password='password')
|
||||
|
||||
# Login
|
||||
client.login(username='test', password='password')
|
||||
|
||||
return user
|
||||
|
|
|
|||
|
|
@ -1,301 +0,0 @@
|
|||
from django.test import TestCase
|
||||
from wagtail.tests.models import SimplePage, EventPage
|
||||
from wagtail.tests.utils import login, unittest
|
||||
from wagtail.wagtailcore.models import Page
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
|
||||
class TestHome(TestCase):
|
||||
def setUp(self):
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_status_code(self):
|
||||
response = self.client.get(reverse('wagtailadmin_home'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
class TestPageExplorer(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Add child page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_explore(self):
|
||||
response = self.client.get(reverse('wagtailadmin_explore', args=(self.root_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(self.root_page, response.context['parent_page'])
|
||||
self.assertTrue(response.context['pages'].filter(id=self.child_page.id).exists())
|
||||
|
||||
|
||||
class TestPageCreation(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_add_subpage(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(self.root_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_add_subpage_nonexistantparent(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(100000, )))
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_create_simplepage(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_create_simplepage_post(self):
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Find the page and check it
|
||||
page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific
|
||||
self.assertEqual(page.title, post_data['title'])
|
||||
self.assertIsInstance(page, SimplePage)
|
||||
self.assertFalse(page.live)
|
||||
|
||||
def test_create_simplepage_post_publish(self):
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-publish': "Publish",
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Find the page and check it
|
||||
page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific
|
||||
self.assertEqual(page.title, post_data['title'])
|
||||
self.assertIsInstance(page, SimplePage)
|
||||
self.assertTrue(page.live)
|
||||
|
||||
def test_create_simplepage_post_existingslug(self):
|
||||
# This tests the existing slug checking on page save
|
||||
|
||||
# Create a page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
|
||||
# Attempt to create a new one with the same slug
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-publish': "Publish",
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Should not be redirected (as the save should fail)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_create_nonexistantparent(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', 100000)))
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
@unittest.expectedFailure # FIXME: Crashes!
|
||||
def test_create_nonpagetype(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('wagtailimages', 'image', self.root_page.id)))
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
|
||||
class TestPageEdit(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Add child page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.child_page.live = True
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
self.child_page.save_revision()
|
||||
|
||||
# Add event page (to test edit handlers)
|
||||
self.event_page = EventPage()
|
||||
self.event_page.title = "Event page"
|
||||
self.event_page.slug = "event-page"
|
||||
self.root_page.add_child(instance=self.event_page)
|
||||
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_edit_page(self):
|
||||
# Tests that the edit page loads
|
||||
response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.event_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_edit_post(self):
|
||||
# Tests simple editing
|
||||
post_data = {
|
||||
'title': "I've been edited!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
}
|
||||
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)
|
||||
|
||||
# The page should have "has_unpublished_changes" flag set
|
||||
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
||||
self.assertTrue(child_page_new.has_unpublished_changes)
|
||||
|
||||
def test_edit_post_publish(self):
|
||||
# Tests publish from edit page
|
||||
post_data = {
|
||||
'title': "I've been edited!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-publish': "Publish",
|
||||
}
|
||||
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)
|
||||
|
||||
# Check that the page was edited
|
||||
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
||||
self.assertEqual(child_page_new.title, post_data['title'])
|
||||
|
||||
# The page shouldn't have "has_unpublished_changes" flag set
|
||||
self.assertFalse(child_page_new.has_unpublished_changes)
|
||||
|
||||
|
||||
class TestPageDelete(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Add child page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_delete(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_delete_post(self):
|
||||
post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data
|
||||
response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that the page is gone
|
||||
self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0)
|
||||
|
||||
|
||||
class TestPageSearch(TestCase):
|
||||
def setUp(self):
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def get(self, params={}):
|
||||
return self.client.get(reverse('wagtailadmin_pages_search'), params)
|
||||
|
||||
def test_status_code(self):
|
||||
self.assertEqual(self.get().status_code, 200)
|
||||
|
||||
def test_search(self):
|
||||
response = self.get({'q': "Hello"})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['query_string'], "Hello")
|
||||
|
||||
def test_pagination(self):
|
||||
pages = ['0', '1', '-1', '9999', 'Not a page']
|
||||
for page in pages:
|
||||
response = self.get({'p': page})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_root_can_appear_in_search_results(self):
|
||||
response = self.client.get('/admin/pages/search/?q=roo')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
# 'pages' list in the response should contain root
|
||||
results = response.context['pages']
|
||||
self.assertTrue(any([r.slug == 'root' for r in results]))
|
||||
|
||||
|
||||
class TestPageMove(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Create two sections
|
||||
self.section_a = SimplePage()
|
||||
self.section_a.title = "Section A"
|
||||
self.section_a.slug = "section-a"
|
||||
self.root_page.add_child(instance=self.section_a)
|
||||
|
||||
self.section_b = SimplePage()
|
||||
self.section_b.title = "Section B"
|
||||
self.section_b.slug = "section-b"
|
||||
self.root_page.add_child(instance=self.section_b)
|
||||
|
||||
# Add test page into section A
|
||||
self.test_page = SimplePage()
|
||||
self.test_page.title = "Hello world!"
|
||||
self.test_page.slug = "hello-world"
|
||||
self.section_a.add_child(instance=self.test_page)
|
||||
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_page_move(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_move', args=(self.test_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_page_move_confirm(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_move_confirm', args=(self.test_page.id, self.section_b.id)))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_page_set_page_position(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_set_page_position', args=(self.test_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
class TestEditorHooks(TestCase):
|
||||
def setUp(self):
|
||||
self.homepage = Page.objects.get(id=2)
|
||||
login(self.client)
|
||||
|
||||
def test_editor_css_and_js_hooks_on_add(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.homepage.id)))
|
||||
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>')
|
||||
|
||||
def test_editor_css_and_js_hooks_on_edit(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.homepage.id, )))
|
||||
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>')
|
||||
0
wagtail/wagtailadmin/tests/__init__.py
Normal file
0
wagtail/wagtailadmin/tests/__init__.py
Normal file
320
wagtail/wagtailadmin/tests/test_account_management.py
Normal file
320
wagtail/wagtailadmin/tests/test_account_management.py
Normal file
|
|
@ -0,0 +1,320 @@
|
|||
from django.test import TestCase
|
||||
from wagtail.tests.utils import login, unittest
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.tokens import PasswordResetTokenGenerator
|
||||
from django.core import mail
|
||||
|
||||
|
||||
class TestAuthentication(TestCase):
|
||||
"""
|
||||
This tests that users can login and logout of the admin interface
|
||||
"""
|
||||
def setUp(self):
|
||||
login(self.client)
|
||||
|
||||
def test_login_view(self):
|
||||
"""
|
||||
This tests that the login view responds with a login page
|
||||
"""
|
||||
# Logout so we can test the login view
|
||||
self.client.logout()
|
||||
|
||||
# Get login page
|
||||
response = self.client.get(reverse('wagtailadmin_login'))
|
||||
|
||||
# Check that the user recieved a login page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/login.html')
|
||||
|
||||
def test_login_view_post(self):
|
||||
"""
|
||||
This posts user credentials to the login view and checks that
|
||||
the user was logged in successfully
|
||||
"""
|
||||
# Logout so we can test the login view
|
||||
self.client.logout()
|
||||
|
||||
# Post credentials to the login page
|
||||
post_data = {
|
||||
'username': 'test',
|
||||
'password': 'password',
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_login'), post_data)
|
||||
|
||||
# Check that the user was redirected to the dashboard
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that the user was logged in
|
||||
self.assertTrue('_auth_user_id' in self.client.session)
|
||||
self.assertEqual(self.client.session['_auth_user_id'], User.objects.get(username='test').id)
|
||||
|
||||
@unittest.expectedFailure # See: https://github.com/torchbox/wagtail/issues/25
|
||||
def test_already_logged_in_redirect(self):
|
||||
"""
|
||||
This tests that a user who is already logged in is automatically
|
||||
redirected to the admin dashboard if they try to access the login
|
||||
page
|
||||
"""
|
||||
# Get login page
|
||||
response = self.client.get(reverse('wagtailadmin_login'))
|
||||
|
||||
# Check that the user was redirected to the dashboard
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
def test_logout(self):
|
||||
"""
|
||||
This tests that the user can logout
|
||||
"""
|
||||
# Get logout page page
|
||||
response = self.client.get(reverse('wagtailadmin_logout'))
|
||||
|
||||
# Check that the user was redirected to the login page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that the user was logged out
|
||||
self.assertFalse('_auth_user_id' in self.client.session)
|
||||
|
||||
|
||||
class TestAccountSection(TestCase):
|
||||
"""
|
||||
This tests that the accounts section is working
|
||||
"""
|
||||
def setUp(self):
|
||||
login(self.client)
|
||||
|
||||
def test_account_view(self):
|
||||
"""
|
||||
This tests that the login view responds with a login page
|
||||
"""
|
||||
# Get account page
|
||||
response = self.client.get(reverse('wagtailadmin_account'))
|
||||
|
||||
# Check that the user recieved an account page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/account/account.html')
|
||||
|
||||
def test_change_password_view(self):
|
||||
"""
|
||||
This tests that the change password view responds with a change password page
|
||||
"""
|
||||
# Get change password page
|
||||
response = self.client.get(reverse('wagtailadmin_account_change_password'))
|
||||
|
||||
# Check that the user recieved a change password page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/account/change_password.html')
|
||||
|
||||
def test_change_password_view_post(self):
|
||||
"""
|
||||
This posts a new password to the change password view and checks
|
||||
that the users password was changed
|
||||
"""
|
||||
# Post new password to change password page
|
||||
post_data = {
|
||||
'new_password1': 'newpassword',
|
||||
'new_password2': 'newpassword',
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_account_change_password'), post_data)
|
||||
|
||||
# Check that the user was redirected
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that the password was changed
|
||||
self.assertTrue(User.objects.get(username='test').check_password('newpassword'))
|
||||
|
||||
def test_change_password_view_post_password_mismatch(self):
|
||||
"""
|
||||
This posts a two passwords that don't match to the password change
|
||||
view and checks that a validation error was raised
|
||||
"""
|
||||
# Post new password to change password page
|
||||
post_data = {
|
||||
'new_password1': 'newpassword',
|
||||
'new_password2': 'badpassword',
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_account_change_password'), post_data)
|
||||
|
||||
# Check that the user wasn't redirected
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Check that a validation error was raised
|
||||
self.assertTrue('new_password2' in response.context['form'].errors.keys())
|
||||
self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2'])
|
||||
|
||||
# Check that the password was not changed
|
||||
self.assertTrue(User.objects.get(username='test').check_password('password'))
|
||||
|
||||
|
||||
class TestPasswordReset(TestCase):
|
||||
"""
|
||||
This tests that the password reset is working
|
||||
"""
|
||||
def setUp(self):
|
||||
# Create a user
|
||||
User.objects.create_superuser(username='test', email='test@email.com', password='password')
|
||||
|
||||
def test_password_reset_view(self):
|
||||
"""
|
||||
This tests that the password reset view returns a password reset page
|
||||
"""
|
||||
# Get password reset page
|
||||
response = self.client.get(reverse('password_reset'))
|
||||
|
||||
# Check that the user recieved a password reset page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/account/password_reset/form.html')
|
||||
|
||||
def test_password_reset_view_post(self):
|
||||
"""
|
||||
This posts an email address to the password reset view and
|
||||
checks that a password reset email was sent
|
||||
"""
|
||||
# Post email address to password reset view
|
||||
post_data = {
|
||||
'email': 'test@email.com',
|
||||
}
|
||||
response = self.client.post(reverse('password_reset'), post_data)
|
||||
|
||||
# Check that the user was redirected
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that a password reset email was sent to the user
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].to, ['test@email.com'])
|
||||
self.assertEqual(mail.outbox[0].subject, "Password reset")
|
||||
|
||||
def test_password_reset_view_post_unknown_email(self):
|
||||
"""
|
||||
This posts an unknown email address to the password reset view and
|
||||
checks that the password reset form raises a validation error
|
||||
"""
|
||||
post_data = {
|
||||
'email': 'unknown@email.com',
|
||||
}
|
||||
response = self.client.post(reverse('password_reset'), post_data)
|
||||
|
||||
# Check that the user wasn't redirected
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Check that a validation error was raised
|
||||
self.assertTrue('__all__' in response.context['form'].errors.keys())
|
||||
self.assertTrue("This email address is not recognised." in response.context['form'].errors['__all__'])
|
||||
|
||||
# Check that an email was not sent
|
||||
self.assertEqual(len(mail.outbox), 0)
|
||||
|
||||
def test_password_reset_view_post_invalid_email(self):
|
||||
"""
|
||||
This posts an incalid email address to the password reset view and
|
||||
checks that the password reset form raises a validation error
|
||||
"""
|
||||
post_data = {
|
||||
'email': 'Hello world!',
|
||||
}
|
||||
response = self.client.post(reverse('password_reset'), post_data)
|
||||
|
||||
# Check that the user wasn't redirected
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Check that a validation error was raised
|
||||
self.assertTrue('email' in response.context['form'].errors.keys())
|
||||
self.assertTrue("Enter a valid email address." in response.context['form'].errors['email'])
|
||||
|
||||
# Check that an email was not sent
|
||||
self.assertEqual(len(mail.outbox), 0)
|
||||
|
||||
def setup_password_reset_confirm_tests(self):
|
||||
from django.utils.encoding import force_bytes
|
||||
from django.utils.http import urlsafe_base64_encode
|
||||
|
||||
# Get user
|
||||
self.user = User.objects.get(username='test')
|
||||
|
||||
# Generate a password reset token
|
||||
self.password_reset_token = PasswordResetTokenGenerator().make_token(self.user)
|
||||
|
||||
# Generate a password reset uid
|
||||
self.password_reset_uid = urlsafe_base64_encode(force_bytes(self.user.pk))
|
||||
|
||||
# Create url_args
|
||||
self.url_kwargs = dict(uidb64=self.password_reset_uid, token=self.password_reset_token)
|
||||
|
||||
def test_password_reset_confirm_view(self):
|
||||
"""
|
||||
This tests that the password reset confirm view returns a password reset confirm page
|
||||
"""
|
||||
self.setup_password_reset_confirm_tests()
|
||||
|
||||
# Get password reset confirm page
|
||||
response = self.client.get(reverse('password_reset_confirm', kwargs=self.url_kwargs))
|
||||
|
||||
# Check that the user recieved a password confirm done page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/account/password_reset/confirm.html')
|
||||
|
||||
def test_password_reset_confirm_view_post(self):
|
||||
"""
|
||||
This posts a new password to the password reset confirm view and checks
|
||||
that the users password was changed
|
||||
"""
|
||||
self.setup_password_reset_confirm_tests()
|
||||
|
||||
# Post new password to change password page
|
||||
post_data = {
|
||||
'new_password1': 'newpassword',
|
||||
'new_password2': 'newpassword',
|
||||
}
|
||||
response = self.client.post(reverse('password_reset_confirm', kwargs=self.url_kwargs), post_data)
|
||||
|
||||
# Check that the user was redirected
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that the password was changed
|
||||
self.assertTrue(User.objects.get(username='test').check_password('newpassword'))
|
||||
|
||||
def test_password_reset_confirm_view_post_password_mismatch(self):
|
||||
"""
|
||||
This posts a two passwords that don't match to the password reset
|
||||
confirm view and checks that a validation error was raised
|
||||
"""
|
||||
self.setup_password_reset_confirm_tests()
|
||||
|
||||
# Post new password to change password page
|
||||
post_data = {
|
||||
'new_password1': 'newpassword',
|
||||
'new_password2': 'badpassword',
|
||||
}
|
||||
response = self.client.post(reverse('password_reset_confirm', kwargs=self.url_kwargs), post_data)
|
||||
|
||||
# Check that the user wasn't redirected
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Check that a validation error was raised
|
||||
self.assertTrue('new_password2' in response.context['form'].errors.keys())
|
||||
self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2'])
|
||||
|
||||
# Check that the password was not changed
|
||||
self.assertTrue(User.objects.get(username='test').check_password('password'))
|
||||
|
||||
def test_password_reset_done_view(self):
|
||||
"""
|
||||
This tests that the password reset done view returns a password reset done page
|
||||
"""
|
||||
# Get password reset done page
|
||||
response = self.client.get(reverse('password_reset_done'))
|
||||
|
||||
# Check that the user recieved a password reset done page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/account/password_reset/done.html')
|
||||
|
||||
def test_password_reset_complete_view(self):
|
||||
"""
|
||||
This tests that the password reset complete view returns a password reset complete page
|
||||
"""
|
||||
# Get password reset complete page
|
||||
response = self.client.get(reverse('password_reset_complete'))
|
||||
|
||||
# Check that the user recieved a password reset complete page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/account/password_reset/complete.html')
|
||||
661
wagtail/wagtailadmin/tests/test_pages_views.py
Normal file
661
wagtail/wagtailadmin/tests/test_pages_views.py
Normal file
|
|
@ -0,0 +1,661 @@
|
|||
from django.test import TestCase
|
||||
from wagtail.tests.models import SimplePage, EventPage
|
||||
from wagtail.tests.utils import login, unittest
|
||||
from wagtail.wagtailcore.models import Page, PageRevision
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.models import User, Permission
|
||||
from django.core import mail
|
||||
|
||||
|
||||
class TestPageExplorer(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Add child page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_explore(self):
|
||||
response = self.client.get(reverse('wagtailadmin_explore', args=(self.root_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(self.root_page, response.context['parent_page'])
|
||||
self.assertTrue(response.context['pages'].filter(id=self.child_page.id).exists())
|
||||
|
||||
|
||||
class TestPageCreation(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Login
|
||||
self.user = login(self.client)
|
||||
|
||||
def test_add_subpage(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(self.root_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_add_subpage_bad_permissions(self):
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Get add subpage page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(self.root_page.id, )))
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_add_subpage_nonexistantparent(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(100000, )))
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_create_simplepage(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_create_simplepage_bad_permissions(self):
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Get page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id, )))
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_create_simplepage_post(self):
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Find the page and check it
|
||||
page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific
|
||||
self.assertEqual(page.title, post_data['title'])
|
||||
self.assertIsInstance(page, SimplePage)
|
||||
self.assertFalse(page.live)
|
||||
|
||||
def test_create_simplepage_post_publish(self):
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-publish': "Publish",
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Find the page and check it
|
||||
page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific
|
||||
self.assertEqual(page.title, post_data['title'])
|
||||
self.assertIsInstance(page, SimplePage)
|
||||
self.assertTrue(page.live)
|
||||
|
||||
def test_create_simplepage_post_submit(self):
|
||||
# Create a moderator user for testing email
|
||||
moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
|
||||
|
||||
# Submit
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-submit': "Submit",
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Find the page and check it
|
||||
page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific
|
||||
self.assertEqual(page.title, post_data['title'])
|
||||
self.assertIsInstance(page, SimplePage)
|
||||
self.assertFalse(page.live)
|
||||
|
||||
# The latest revision for the page should now be in moderation
|
||||
self.assertTrue(page.get_latest_revision().submitted_for_moderation)
|
||||
|
||||
# Check that the moderator got an email
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].to, ['moderator@email.com'])
|
||||
self.assertEqual(mail.outbox[0].subject, 'The page "New page!" has been submitted for moderation')
|
||||
|
||||
def test_create_simplepage_post_existingslug(self):
|
||||
# This tests the existing slug checking on page save
|
||||
|
||||
# Create a page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
|
||||
# Attempt to create a new one with the same slug
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-publish': "Publish",
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Should not be redirected (as the save should fail)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_create_nonexistantparent(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', 100000)))
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
@unittest.expectedFailure # FIXME: Crashes!
|
||||
def test_create_nonpagetype(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('wagtailimages', 'image', self.root_page.id)))
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_preview_on_create(self):
|
||||
post_data = {
|
||||
'title': "New page!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-submit': "Submit",
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_preview_on_create', args=('tests', 'simplepage', self.root_page.id)), post_data)
|
||||
|
||||
# Check the response
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'tests/simple_page.html')
|
||||
self.assertContains(response, "New page!")
|
||||
|
||||
|
||||
class TestPageEdit(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Add child page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.child_page.live = True
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
self.child_page.save_revision()
|
||||
|
||||
# Add event page (to test edit handlers)
|
||||
self.event_page = EventPage()
|
||||
self.event_page.title = "Event page"
|
||||
self.event_page.slug = "event-page"
|
||||
self.root_page.add_child(instance=self.event_page)
|
||||
|
||||
# Login
|
||||
self.user = login(self.client)
|
||||
|
||||
def test_page_edit(self):
|
||||
# Tests that the edit page loads
|
||||
response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.event_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_page_edit_bad_permissions(self):
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Get edit page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.child_page.id, )))
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_page_edit_post(self):
|
||||
# Tests simple editing
|
||||
post_data = {
|
||||
'title': "I've been edited!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
}
|
||||
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)
|
||||
|
||||
# The page should have "has_unpublished_changes" flag set
|
||||
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
||||
self.assertTrue(child_page_new.has_unpublished_changes)
|
||||
|
||||
def test_page_edit_post_publish(self):
|
||||
# Tests publish from edit page
|
||||
post_data = {
|
||||
'title': "I've been edited!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-publish': "Publish",
|
||||
}
|
||||
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)
|
||||
|
||||
# Check that the page was edited
|
||||
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
||||
self.assertEqual(child_page_new.title, post_data['title'])
|
||||
|
||||
# The page shouldn't have "has_unpublished_changes" flag set
|
||||
self.assertFalse(child_page_new.has_unpublished_changes)
|
||||
|
||||
def test_page_edit_post_submit(self):
|
||||
# Create a moderator user for testing email
|
||||
moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
|
||||
|
||||
# Tests submitting from edit page
|
||||
post_data = {
|
||||
'title': "I've been edited!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-submit': "Submit",
|
||||
}
|
||||
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)
|
||||
|
||||
# The page should have "has_unpublished_changes" flag set
|
||||
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
||||
self.assertTrue(child_page_new.has_unpublished_changes)
|
||||
|
||||
# The latest revision for the page should now be in moderation
|
||||
self.assertTrue(child_page_new.get_latest_revision().submitted_for_moderation)
|
||||
|
||||
# Check that the moderator got an email
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].to, ['moderator@email.com'])
|
||||
self.assertEqual(mail.outbox[0].subject, 'The page "Hello world!" has been submitted for moderation') # Note: should this be "I've been edited!"?
|
||||
|
||||
def test_preview_on_edit(self):
|
||||
post_data = {
|
||||
'title': "I've been edited!",
|
||||
'content': "Some content",
|
||||
'slug': 'hello-world',
|
||||
'action-submit': "Submit",
|
||||
}
|
||||
response = self.client.post(reverse('wagtailadmin_pages_preview_on_edit', args=(self.child_page.id, )), post_data)
|
||||
|
||||
# Check the response
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'tests/simple_page.html')
|
||||
self.assertContains(response, "I've been edited!")
|
||||
|
||||
|
||||
class TestPageDelete(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Add child page
|
||||
self.child_page = SimplePage()
|
||||
self.child_page.title = "Hello world!"
|
||||
self.child_page.slug = "hello-world"
|
||||
self.root_page.add_child(instance=self.child_page)
|
||||
|
||||
# Login
|
||||
self.user = login(self.client)
|
||||
|
||||
def test_page_delete(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_page_delete_bad_permissions(self):
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Get delete page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )))
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_page_delete_post(self):
|
||||
post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data
|
||||
response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that the page is gone
|
||||
self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0)
|
||||
|
||||
|
||||
class TestPageSearch(TestCase):
|
||||
def setUp(self):
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def get(self, params=None, **extra):
|
||||
return self.client.get(reverse('wagtailadmin_pages_search'), params or {}, **extra)
|
||||
|
||||
def test_view(self):
|
||||
response = self.get()
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/pages/search.html')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_search(self):
|
||||
response = self.get({'q': "Hello"})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/pages/search.html')
|
||||
self.assertEqual(response.context['query_string'], "Hello")
|
||||
|
||||
def test_ajax(self):
|
||||
response = self.get({'q': "Hello"}, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateNotUsed(response, 'wagtailadmin/pages/search.html')
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/pages/search_results.html')
|
||||
self.assertEqual(response.context['query_string'], "Hello")
|
||||
|
||||
def test_pagination(self):
|
||||
pages = ['0', '1', '-1', '9999', 'Not a page']
|
||||
for page in pages:
|
||||
response = self.get({'q': "Hello", 'p': page})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/pages/search.html')
|
||||
|
||||
def test_root_can_appear_in_search_results(self):
|
||||
response = self.get({'q': "roo"})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
# 'pages' list in the response should contain root
|
||||
results = response.context['pages']
|
||||
self.assertTrue(any([r.slug == 'root' for r in results]))
|
||||
|
||||
|
||||
class TestPageMove(TestCase):
|
||||
def setUp(self):
|
||||
# Find root page
|
||||
self.root_page = Page.objects.get(id=2)
|
||||
|
||||
# Create two sections
|
||||
self.section_a = SimplePage()
|
||||
self.section_a.title = "Section A"
|
||||
self.section_a.slug = "section-a"
|
||||
self.root_page.add_child(instance=self.section_a)
|
||||
|
||||
self.section_b = SimplePage()
|
||||
self.section_b.title = "Section B"
|
||||
self.section_b.slug = "section-b"
|
||||
self.root_page.add_child(instance=self.section_b)
|
||||
|
||||
# Add test page into section A
|
||||
self.test_page = SimplePage()
|
||||
self.test_page.title = "Hello world!"
|
||||
self.test_page.slug = "hello-world"
|
||||
self.section_a.add_child(instance=self.test_page)
|
||||
|
||||
# Login
|
||||
self.user = login(self.client)
|
||||
|
||||
def test_page_move(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_move', args=(self.test_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_page_move_bad_permissions(self):
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Get move page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_move', args=(self.test_page.id, )))
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_page_move_confirm(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_move_confirm', args=(self.test_page.id, self.section_b.id)))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_page_set_page_position(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_set_page_position', args=(self.test_page.id, )))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
class TestPageUnpublish(TestCase):
|
||||
def setUp(self):
|
||||
self.user = login(self.client)
|
||||
|
||||
# Create a page to unpublish
|
||||
root_page = Page.objects.get(id=2)
|
||||
self.page = SimplePage(
|
||||
title="Hello world!",
|
||||
slug='hello-world',
|
||||
live=True,
|
||||
)
|
||||
root_page.add_child(instance=self.page)
|
||||
|
||||
def test_unpublish_view(self):
|
||||
"""
|
||||
This tests that the unpublish view responds with an unpublish confirm page
|
||||
"""
|
||||
# Get unpublish page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_unpublish', args=(self.page.id, )))
|
||||
|
||||
# Check that the user recieved an unpublish confirm page
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/pages/confirm_unpublish.html')
|
||||
|
||||
def test_unpublish_view_invalid_page_id(self):
|
||||
"""
|
||||
This tests that the unpublish view returns an error if the page id is invalid
|
||||
"""
|
||||
# Get unpublish page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_unpublish', args=(12345, )))
|
||||
|
||||
# Check that the user recieved a 404 response
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_unpublish_view_bad_permissions(self):
|
||||
"""
|
||||
This tests that the unpublish view doesn't allow users without unpublish permissions
|
||||
"""
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Get unpublish page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_unpublish', args=(self.page.id, )))
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_unpublish_view_post(self):
|
||||
"""
|
||||
This posts to the unpublish view and checks that the page was unpublished
|
||||
"""
|
||||
# Post to the unpublish page
|
||||
response = self.client.post(reverse('wagtailadmin_pages_unpublish', args=(self.page.id, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
})
|
||||
|
||||
# Check that the user was redirected
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Check that the page was unpublished
|
||||
self.assertFalse(SimplePage.objects.get(id=self.page.id).live)
|
||||
|
||||
|
||||
class TestApproveRejectModeration(TestCase):
|
||||
def setUp(self):
|
||||
self.submitter = User.objects.create_superuser(
|
||||
username='submitter',
|
||||
email='submitter@email.com',
|
||||
password='password',
|
||||
)
|
||||
|
||||
self.user = login(self.client)
|
||||
|
||||
# Create a page and submit it for moderation
|
||||
root_page = Page.objects.get(id=2)
|
||||
self.page = SimplePage(
|
||||
title="Hello world!",
|
||||
slug='hello-world',
|
||||
live=False,
|
||||
)
|
||||
root_page.add_child(instance=self.page)
|
||||
|
||||
self.page.save_revision(user=self.submitter, submitted_for_moderation=True)
|
||||
self.revision = self.page.get_latest_revision()
|
||||
|
||||
def test_approve_moderation_view(self):
|
||||
"""
|
||||
This posts to the approve moderation view and checks that the page was approved
|
||||
"""
|
||||
# Post
|
||||
response = self.client.post(reverse('wagtailadmin_pages_approve_moderation', args=(self.revision.id, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
})
|
||||
|
||||
# Check that the user was redirected
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Page must be live
|
||||
self.assertTrue(Page.objects.get(id=self.page.id).live)
|
||||
|
||||
# Submitter must recieve an approved email
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].to, ['submitter@email.com'])
|
||||
self.assertEqual(mail.outbox[0].subject, 'The page "Hello world!" has been approved')
|
||||
|
||||
def test_approve_moderation_view_bad_revision_id(self):
|
||||
"""
|
||||
This tests that the approve moderation view handles invalid revision ids correctly
|
||||
"""
|
||||
# Post
|
||||
response = self.client.post(reverse('wagtailadmin_pages_approve_moderation', args=(12345, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
})
|
||||
|
||||
# Check that the user recieved a 404 response
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_approve_moderation_view_bad_permissions(self):
|
||||
"""
|
||||
This tests that the approve moderation view doesn't allow users without moderation permissions
|
||||
"""
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Post
|
||||
response = self.client.post(reverse('wagtailadmin_pages_approve_moderation', args=(self.revision.id, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
})
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_reject_moderation_view(self):
|
||||
"""
|
||||
This posts to the reject moderation view and checks that the page was rejected
|
||||
"""
|
||||
# Post
|
||||
response = self.client.post(reverse('wagtailadmin_pages_reject_moderation', args=(self.revision.id, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
})
|
||||
|
||||
# Check that the user was redirected
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
# Page must not be live
|
||||
self.assertFalse(Page.objects.get(id=self.page.id).live)
|
||||
|
||||
# Revision must no longer be submitted for moderation
|
||||
self.assertFalse(PageRevision.objects.get(id=self.revision.id).submitted_for_moderation)
|
||||
|
||||
# Submitter must recieve a rejected email
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].to, ['submitter@email.com'])
|
||||
self.assertEqual(mail.outbox[0].subject, 'The page "Hello world!" has been rejected')
|
||||
|
||||
def test_reject_moderation_view_bad_revision_id(self):
|
||||
"""
|
||||
This tests that the reject moderation view handles invalid revision ids correctly
|
||||
"""
|
||||
# Post
|
||||
response = self.client.post(reverse('wagtailadmin_pages_reject_moderation', args=(12345, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
})
|
||||
|
||||
# Check that the user recieved a 404 response
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_reject_moderation_view_bad_permissions(self):
|
||||
"""
|
||||
This tests that the reject moderation view doesn't allow users without moderation permissions
|
||||
"""
|
||||
# Remove privileges from user
|
||||
self.user.is_superuser = False
|
||||
self.user.user_permissions.add(
|
||||
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
|
||||
)
|
||||
self.user.save()
|
||||
|
||||
# Post
|
||||
response = self.client.post(reverse('wagtailadmin_pages_reject_moderation', args=(self.revision.id, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
})
|
||||
|
||||
# Check that the user recieved a 403 response
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_preview_for_moderation(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_preview_for_moderation', args=(self.revision.id, )))
|
||||
|
||||
# Check response
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'tests/simple_page.html')
|
||||
self.assertContains(response, "Hello world!")
|
||||
|
||||
|
||||
class TestContentTypeUse(TestCase):
|
||||
fixtures = ['test.json']
|
||||
|
||||
def setUp(self):
|
||||
self.user = login(self.client)
|
||||
|
||||
def test_content_type_use(self):
|
||||
# Get use of event page
|
||||
response = self.client.get(reverse('wagtailadmin_pages_type_use', args=('tests', 'eventpage')))
|
||||
|
||||
# Check response
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'wagtailadmin/pages/content_type_use.html')
|
||||
self.assertContains(response, "Christmas")
|
||||
46
wagtail/wagtailadmin/tests/tests.py
Normal file
46
wagtail/wagtailadmin/tests/tests.py
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
from django.test import TestCase
|
||||
from wagtail.tests.models import SimplePage, EventPage
|
||||
from wagtail.tests.utils import login, unittest
|
||||
from wagtail.wagtailcore.models import Page
|
||||
from wagtail.wagtailadmin.tasks import send_email_task
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core import mail
|
||||
|
||||
|
||||
class TestHome(TestCase):
|
||||
def setUp(self):
|
||||
# Login
|
||||
login(self.client)
|
||||
|
||||
def test_status_code(self):
|
||||
response = self.client.get(reverse('wagtailadmin_home'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
class TestEditorHooks(TestCase):
|
||||
def setUp(self):
|
||||
self.homepage = Page.objects.get(id=2)
|
||||
login(self.client)
|
||||
|
||||
def test_editor_css_and_js_hooks_on_add(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.homepage.id)))
|
||||
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>')
|
||||
|
||||
def test_editor_css_and_js_hooks_on_edit(self):
|
||||
response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.homepage.id, )))
|
||||
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 TestSendEmailTask(TestCase):
|
||||
def test_send_email(self):
|
||||
send_email_task("Test subject", "Test content", ["nobody@email.com"], "test@email.com")
|
||||
|
||||
# Check that the email was sent
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].subject, "Test subject")
|
||||
self.assertEqual(mail.outbox[0].body, "Test content")
|
||||
self.assertEqual(mail.outbox[0].to, ["nobody@email.com"])
|
||||
Loading…
Reference in a new issue