summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@sixmedia.com>2013-04-04 02:51:37 +0700
committerTim Graham <timograham@gmail.com>2013-06-13 15:06:25 -0400
commit9e50833e2293aa2734f14f9873abe4f83d03b8c6 (patch)
tree68d879969ba722cc9e8b4e37d32746ac8cd119af /tests
parentdc9c359546580d40df209816cef244b78dcf7435 (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.py69
-rw-r--r--tests/model_formsets/tests.py52
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!!']})