From 1c4c2c5d1f517966c475729cc6589d52f98e7f68 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 23 Jan 2015 16:56:23 +0000 Subject: [PATCH] test FieldPanel with real models --- .../wagtailadmin/tests/test_edit_handlers.py | 142 ++++++++++-------- 1 file changed, 76 insertions(+), 66 deletions(-) diff --git a/wagtail/wagtailadmin/tests/test_edit_handlers.py b/wagtail/wagtailadmin/tests/test_edit_handlers.py index b75675b9f3..aee34c1f2a 100644 --- a/wagtail/wagtailadmin/tests/test_edit_handlers.py +++ b/wagtail/wagtailadmin/tests/test_edit_handlers.py @@ -1,5 +1,7 @@ from mock import MagicMock +from datetime import date + from django.core.exceptions import ImproperlyConfigured from django.test import TestCase from django import forms @@ -252,83 +254,91 @@ class TestObjectList(TestCase): class TestFieldPanel(TestCase): - class FakeClass(object): - required = False - widget = 'fake widget' - - class FakeField(object): - label = 'label' - help_text = 'help text' - errors = ['errors'] - id_for_label = 'id for label' - - class FakeForm(dict): - def __init__(self, *args, **kwargs): - self.fields = self.fields_iterator() - - def fields_iterator(self): - for i in self: - yield i - def setUp(self): - fake_field = self.FakeField() - fake_field.field = self.FakeClass() - self.field_panel = FieldPanel('barbecue', 'snowman')( - instance=True, - form={'barbecue': fake_field}) + self.EventPageForm = get_form_for_model(EventPage, formsets = []) + self.event = EventPage(title='Abergavenny sheepdog trials', + date_from=date(2014, 7, 20), date_to=date(2014, 7, 21)) + + self.EndDatePanel = FieldPanel('date_to', classname='full-width') def test_render_as_object(self): - result = self.field_panel.render_as_object() - self.assertIn('label', - result) - self.assertIn('

', - result) + form = self.EventPageForm( + {'title': 'Pontypridd sheepdog trials', 'date_from': '2014-07-20', 'date_to': '2014-07-22'}, + instance=self.event) + + form.is_valid() + + field_panel = self.EndDatePanel( + instance=self.event, + form=form + ) + result = field_panel.render_as_object() + + # check that label appears in the 'object' wrapper as well as the field + self.assertIn('End date', result) + self.assertIn('', result) + + # check that help text is included + self.assertIn('Not required if event is on a single day', result) + + # check that the populated form field is included + self.assertIn('value="2014-07-22"', result) + + # there should be no errors on this field + self.assertNotIn('

', result) def test_render_as_field(self): - field = self.FakeField() - bound_field = self.FakeField() - bound_field.field = field - self.field_panel.bound_field = bound_field - result = self.field_panel.render_as_field() - self.assertIn('

help text

', - result) - self.assertIn('errors', - result) + form = self.EventPageForm( + {'title': 'Pontypridd sheepdog trials', 'date_from': '2014-07-20', 'date_to': '2014-07-22'}, + instance=self.event) + + form.is_valid() + + field_panel = self.EndDatePanel( + instance=self.event, + form=form + ) + result = field_panel.render_as_field() + + # check that label is output in the 'field' style + self.assertIn('', result) + self.assertNotIn('End date', result) + + # check that help text is included + self.assertIn('Not required if event is on a single day', result) + + # check that the populated form field is included + self.assertIn('value="2014-07-22"', result) + + # there should be no errors on this field + self.assertNotIn('

', result) def test_rendered_fields(self): - result = self.field_panel.rendered_fields() - self.assertEqual(result, ['barbecue']) + form = self.EventPageForm( + {'title': 'Pontypridd sheepdog trials', 'date_from': '2014-07-20', 'date_to': '2014-07-22'}, + instance=self.event) + field_panel = self.EndDatePanel( + instance=self.event, + form=form + ) + result = field_panel.rendered_fields() + self.assertEqual(result, ['date_to']) - def test_field_type(self): - fake_object = self.FakeClass() - another_fake_object = self.FakeClass() - fake_object.field = another_fake_object - self.field_panel.bound_field = fake_object - self.assertEqual(self.field_panel.field_type(), 'fake_class') + def test_error_message_is_rendered(self): + form = self.EventPageForm( + {'title': 'Pontypridd sheepdog trials', 'date_from': '2014-07-20', 'date_to': '2014-07-33'}, + instance=self.event) - def test_widget_overrides(self): - result = FieldPanel('barbecue', 'snowman').widget_overrides() - self.assertEqual(result, {}) + form.is_valid() - def test_required_formsets(self): - result = FieldPanel('barbecue', 'snowman').required_formsets() - self.assertEqual(result, []) + field_panel = self.EndDatePanel( + instance=self.event, + form=form + ) + result = field_panel.render_as_field() - def test_get_form_class(self): - result = FieldPanel('barbecue', 'snowman').get_form_class(Page) - self.assertTrue(issubclass(result, WagtailAdminModelForm)) - - def test_render_missing_fields(self): - fake_form = self.FakeForm() - fake_form["foo"] = "bar" - self.field_panel.form = fake_form - self.assertEqual(self.field_panel.render_missing_fields(), "bar") - - def test_render_form_content(self): - fake_form = self.FakeForm() - fake_form["foo"] = "bar" - self.field_panel.form = fake_form - self.assertIn("bar", self.field_panel.render_form_content()) + self.assertIn('

', result) + self.assertIn('Enter a valid date.', result) class TestPageChooserPanel(TestCase):