diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index 844fb836f..bbf91d278 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -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) diff --git a/wagtail/wagtailsnippets/tests.py b/wagtail/wagtailsnippets/tests.py index 782fe9087..fd283f7f5 100644 --- a/wagtail/wagtailsnippets/tests.py +++ b/wagtail/wagtailsnippets/tests.py @@ -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) diff --git a/wagtail/wagtailsnippets/views/snippets.py b/wagtail/wagtailsnippets/views/snippets.py index 763362750..ed0e310cb 100644 --- a/wagtail/wagtailsnippets/views/snippets.py +++ b/wagtail/wagtailsnippets/views/snippets.py @@ -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 ) )