diff options
| author | Loic Bistuer <loic.bistuer@sixmedia.com> | 2013-04-04 02:51:37 +0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2013-06-13 15:06:25 -0400 |
| commit | 9e50833e2293aa2734f14f9873abe4f83d03b8c6 (patch) | |
| tree | 68d879969ba722cc9e8b4e37d32746ac8cd119af /tests | |
| parent | dc9c359546580d40df209816cef244b78dcf7435 (diff) | |
Fixed #20000 -- Allowed ModelForm meta overrides for label, help_text and error_messages
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/model_forms/tests.py | 69 | ||||
| -rw-r--r-- | tests/model_formsets/tests.py | 52 |
2 files changed, 110 insertions, 11 deletions
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 509413fb61..aadc7a618e 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -490,7 +490,7 @@ class ModelFormBaseTest(TestCase): ['slug', 'name']) -class TestWidgetForm(forms.ModelForm): +class FieldOverridesTroughFormMetaForm(forms.ModelForm): class Meta: model = Category fields = ['name', 'url', 'slug'] @@ -498,25 +498,74 @@ class TestWidgetForm(forms.ModelForm): 'name': forms.Textarea, 'url': forms.TextInput(attrs={'class': 'url'}) } + labels = { + 'name': 'Title', + } + help_texts = { + 'slug': 'Watch out! Letters, numbers, underscores and hyphens only.', + } + error_messages = { + 'slug': { + 'invalid': ( + "Didn't you read the help text? " + "We said letters, numbers, underscores and hyphens only!" + ) + } + } +class TestFieldOverridesTroughFormMeta(TestCase): + def test_widget_overrides(self): + form = FieldOverridesTroughFormMetaForm() + self.assertHTMLEqual( + str(form['name']), + '<textarea id="id_name" rows="10" cols="40" name="name"></textarea>', + ) + self.assertHTMLEqual( + str(form['url']), + '<input id="id_url" type="text" class="url" name="url" maxlength="40" />', + ) + self.assertHTMLEqual( + str(form['slug']), + '<input id="id_slug" type="text" name="slug" maxlength="20" />', + ) -class TestWidgets(TestCase): - def test_base_widgets(self): - frm = TestWidgetForm() + def test_label_overrides(self): + form = FieldOverridesTroughFormMetaForm() self.assertHTMLEqual( - str(frm['name']), - '<textarea id="id_name" rows="10" cols="40" name="name"></textarea>' + str(form['name'].label_tag()), + '<label for="id_name">Title:</label>', ) self.assertHTMLEqual( - str(frm['url']), - '<input id="id_url" type="text" class="url" name="url" maxlength="40" />' + str(form['url'].label_tag()), + '<label for="id_url">The URL:</label>', ) self.assertHTMLEqual( - str(frm['slug']), - '<input id="id_slug" type="text" name="slug" maxlength="20" />' + str(form['slug'].label_tag()), + '<label for="id_slug">Slug:</label>', + ) + + def test_help_text_overrides(self): + form = FieldOverridesTroughFormMetaForm() + self.assertEqual( + form['slug'].help_text, + 'Watch out! Letters, numbers, underscores and hyphens only.', ) + def test_error_messages_overrides(self): + form = FieldOverridesTroughFormMetaForm(data={ + 'name': 'Category', + 'url': '/category/', + 'slug': '!%#*@', + }) + form.full_clean() + + error = [ + "Didn't you read the help text? " + "We said letters, numbers, underscores and hyphens only!", + ] + self.assertEqual(form.errors, {'slug': error}) + class IncompleteCategoryFormWithFields(forms.ModelForm): """ diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py index 8cfdf53995..03cd3b0159 100644 --- a/tests/model_formsets/tests.py +++ b/tests/model_formsets/tests.py @@ -1261,7 +1261,7 @@ class ModelFormsetTest(TestCase): ['Please correct the duplicate data for subtitle which must be unique for the month in posted.']) -class TestModelFormsetWidgets(TestCase): +class TestModelFormsetOverridesTroughFormMeta(TestCase): def test_modelformset_factory_widgets(self): widgets = { 'name': forms.TextInput(attrs={'class': 'poet'}) @@ -1283,3 +1283,53 @@ class TestModelFormsetWidgets(TestCase): "%s" % form['title'], '<input class="book" id="id_title" maxlength="100" name="title" type="text" />' ) + + def test_modelformset_factory_labels_overrides(self): + BookFormSet = modelformset_factory(Book, fields="__all__", labels={ + 'title': 'Name' + }) + form = BookFormSet.form() + self.assertHTMLEqual(form['title'].label_tag(), '<label for="id_title">Name:</label>') + + def test_inlineformset_factory_labels_overrides(self): + BookFormSet = inlineformset_factory(Author, Book, fields="__all__", labels={ + 'title': 'Name' + }) + form = BookFormSet.form() + self.assertHTMLEqual(form['title'].label_tag(), '<label for="id_title">Name:</label>') + + def test_modelformset_factory_help_text_overrides(self): + BookFormSet = modelformset_factory(Book, fields="__all__", help_texts={ + 'title': 'Choose carefully.' + }) + form = BookFormSet.form() + self.assertEqual(form['title'].help_text, 'Choose carefully.') + + def test_inlineformset_factory_help_text_overrides(self): + BookFormSet = inlineformset_factory(Author, Book, fields="__all__", help_texts={ + 'title': 'Choose carefully.' + }) + form = BookFormSet.form() + self.assertEqual(form['title'].help_text, 'Choose carefully.') + + def test_modelformset_factory_error_messages_overrides(self): + author = Author.objects.create(pk=1, name='Charles Baudelaire') + BookFormSet = modelformset_factory(Book, fields="__all__", error_messages={ + 'title': { + 'max_length': 'Title too long!!' + } + }) + form = BookFormSet.form(data={'title': 'Foo ' * 30, 'author': author.id}) + form.full_clean() + self.assertEqual(form.errors, {'title': ['Title too long!!']}) + + def test_inlineformset_factory_error_messages_overrides(self): + author = Author.objects.create(pk=1, name='Charles Baudelaire') + BookFormSet = inlineformset_factory(Author, Book, fields="__all__", error_messages={ + 'title': { + 'max_length': 'Title too long!!' + } + }) + form = BookFormSet.form(data={'title': 'Foo ' * 30, 'author': author.id}) + form.full_clean() + self.assertEqual(form.errors, {'title': ['Title too long!!']}) |
