Unit tests for snippets views

This commit is contained in:
Tom Talbot 2014-05-30 15:08:12 +01:00
parent 9bbe3f1c19
commit 4e260fb9a1
3 changed files with 157 additions and 19 deletions

View file

@ -7,6 +7,7 @@ from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel, Inli
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
from wagtail.wagtaildocs.edit_handlers import DocumentChooserPanel
from wagtail.wagtailforms.models import AbstractEmailForm, AbstractFormField
from wagtail.wagtailsnippets.models import register_snippet
EVENT_AUDIENCE_CHOICES = (
@ -252,3 +253,20 @@ FormPage.content_panels = [
FieldPanel('subject', classname="full"),
], "Email")
]
# Snippets
class Advert(models.Model):
url = models.URLField(null=True, blank=True)
text = models.CharField(max_length=255)
panels = [
FieldPanel('url'),
FieldPanel('text'),
]
def __unicode__(self):
return self.text
register_snippet(Advert)

View file

@ -1,19 +1,139 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from wagtail.tests.utils import unittest
from django.test import TestCase
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from wagtail.tests.utils import login, unittest
from wagtail.tests.models import Advert
@unittest.skip("Need real tests")
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)
class TestSnippetIndexView(TestCase):
def setUp(self):
login(self.client)
def get(self, params={}):
return self.client.get(reverse('wagtailsnippets_index'), params)
def test_status_code(self):
self.assertEqual(self.get().status_code, 200)
def test_displays_snippet(self):
self.assertContains(self.get(), "Adverts")
class TestSnippetListView(TestCase):
def setUp(self):
login(self.client)
def get(self, params={}):
return self.client.get(reverse('wagtailsnippets_list',
args=('tests', 'advert')),
params)
def test_status_code(self):
self.assertEqual(self.get().status_code, 200)
def test_displays_add_button(self):
self.assertContains(self.get(), "Add advert")
class TestSnippetCreateView(TestCase):
def setUp(self):
login(self.client)
def get(self, params={}):
return self.client.get(reverse('wagtailsnippets_create',
args=('tests', 'advert')),
params)
def post(self, post_data={}):
return self.client.post(reverse('wagtailsnippets_create',
args=('tests', 'advert')),
post_data)
def test_status_code(self):
self.assertEqual(self.get().status_code, 200)
def test_create_invalid(self):
response = self.post(post_data={'foo': 'bar'})
self.assertContains(response, "The snippet could not be created due to errors.")
self.assertContains(response, "This field is required.")
def test_create(self):
response = self.post(post_data={'text': 'test_advert',
'url': 'http://www.example.com/'})
self.assertEqual(response.status_code, 302)
snippets = Advert.objects.filter(text='test_advert')
self.assertEqual(snippets.count(), 1)
self.assertEqual(snippets.first().url, 'http://www.example.com/')
class TestSnippetEditView(TestCase):
def setUp(self):
self.test_snippet = Advert()
self.test_snippet.text = 'test_advert'
self.test_snippet.url = 'http://www.example.com/'
self.test_snippet.save()
login(self.client)
def get(self, params={}):
return self.client.get(reverse('wagtailsnippets_edit',
args=('tests', 'advert', self.test_snippet.id)),
params)
def post(self, post_data={}):
return self.client.post(reverse('wagtailsnippets_edit',
args=('tests', 'advert', self.test_snippet.id)),
post_data)
def test_status_code(self):
self.assertEqual(self.get().status_code, 200)
def test_non_existant_model(self):
response = self.client.get(reverse('wagtailsnippets_edit',
args=('tests', 'foo', self.test_snippet.id)))
self.assertEqual(response.status_code, 404)
def test_nonexistant_id(self):
response = self.client.get(reverse('wagtailsnippets_edit',
args=('tests', 'advert', 999999)))
self.assertEqual(response.status_code, 404)
def test_edit_invalid(self):
response = self.post(post_data={'foo': 'bar'})
self.assertContains(response, "The snippet could not be saved due to errors.")
self.assertContains(response, "This field is required.")
def test_edit(self):
response = self.post(post_data={'text': 'edited_test_advert',
'url': 'http://www.example.com/edited'})
self.assertEqual(response.status_code, 302)
snippets = Advert.objects.filter(text='edited_test_advert')
self.assertEqual(snippets.count(), 1)
self.assertEqual(snippets.first().url, 'http://www.example.com/edited')
class TestSnippetDelete(TestCase):
def setUp(self):
self.test_snippet = Advert()
self.test_snippet.text = 'test_advert'
self.test_snippet.url = 'http://www.example.com/'
self.test_snippet.save()
login(self.client)
def test_delete_get(self):
response = self.client.get(reverse('wagtailsnippets_delete', args=('tests', 'advert', self.test_snippet.id, )))
self.assertEqual(response.status_code, 200)
def test_delete_post(self):
post_data = {'foo': 'bar'} # For some reason, this test doesn't work without a bit of POST data
response = self.client.post(reverse('wagtailsnippets_delete', args=('tests', 'advert', self.test_snippet.id, )), post_data)
# Should be redirected to explorer page
self.assertEqual(response.status_code, 302)
# Check that the page is gone
self.assertEqual(Advert.objects.filter(text='test_advert').count(), 0)

View file

@ -125,7 +125,7 @@ def create(request, content_type_app_name, content_type_model_name):
messages.success(
request,
_("{snippet_type} '{instance}' created.").format(
snippet_type=capfirst(get_snippet_type_name(content_type)[0]),
snippet_type=capfirst(get_snippet_type_name(content_type)[0]),
instance=instance
)
)
@ -166,7 +166,7 @@ def edit(request, content_type_app_name, content_type_model_name, id):
messages.success(
request,
_("{snippet_type} '{instance}' updated.").format(
snippet_type=capfirst(snippet_type_name),
snippet_type=capfirst(snippet_type_name),
instance=instance
)
)
@ -202,7 +202,7 @@ def delete(request, content_type_app_name, content_type_model_name, id):
messages.success(
request,
_("{snippet_type} '{instance}' deleted.").format(
snippet_type=capfirst(snippet_type_name),
snippet_type=capfirst(snippet_type_name),
instance=instance
)
)