summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHonza Král <honza.kral@gmail.com>2010-11-21 17:27:01 +0000
committerHonza Král <honza.kral@gmail.com>2010-11-21 17:27:01 +0000
commit65b380e74ab79ee011f7556e342dd4d656b018a5 (patch)
treebbab2ce8c6ab22c9648d3f2bc1d1b1264f2ad8fc /tests
parent752bd8bf75f1bf64e5014ee65b65b173197e5f53 (diff)
Fixed #11418 -- formset.cleaned_data no longer raises AttributeError when is_valid is True. Thanks mlavin!
This also introduces a slightly backwards-incompatible change in FormSet's behavior, see the release docs for details. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14667 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/forms/tests/formsets.py49
1 files changed, 47 insertions, 2 deletions
diff --git a/tests/regressiontests/forms/tests/formsets.py b/tests/regressiontests/forms/tests/formsets.py
index bf7124fe59..ed2581f6ac 100644
--- a/tests/regressiontests/forms/tests/formsets.py
+++ b/tests/regressiontests/forms/tests/formsets.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-from django.forms import Form, CharField, IntegerField, ValidationError
+from django.forms import Form, CharField, IntegerField, ValidationError, DateField
from django.forms.formsets import formset_factory, BaseFormSet
from django.utils.unittest import TestCase
@@ -741,7 +741,12 @@ class FormsFormsetTestCase(TestCase):
formset = FavoriteDrinksFormSet()
self.assertEqual(formset.management_form.prefix, 'form')
- formset = FavoriteDrinksFormSet(data={})
+ data = {
+ 'form-TOTAL_FORMS': '2',
+ 'form-INITIAL_FORMS': '0',
+ 'form-MAX_NUM_FORMS': '0',
+ }
+ formset = FavoriteDrinksFormSet(data=data)
self.assertEqual(formset.management_form.prefix, 'form')
formset = FavoriteDrinksFormSet(initial={})
@@ -795,3 +800,43 @@ class FormsetAsFooTests(TestCase):
self.assertEqual(formset.as_ul(),"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" /><input type="hidden" name="choices-INITIAL_FORMS" value="0" /><input type="hidden" name="choices-MAX_NUM_FORMS" value="0" />
<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
<li>Votes: <input type="text" name="choices-0-votes" value="100" /></li>""")
+
+
+# Regression test for #11418 #################################################
+class ArticleForm(Form):
+ title = CharField()
+ pub_date = DateField()
+
+ArticleFormSet = formset_factory(ArticleForm)
+
+class TestIsBoundBehavior(TestCase):
+ def test_no_data_raises_validation_error(self):
+ self.assertRaises(ValidationError, ArticleFormSet, {})
+
+ def test_with_management_data_attrs_work_fine(self):
+ data = {
+ 'form-TOTAL_FORMS': u'1',
+ 'form-INITIAL_FORMS': u'0',
+ }
+ formset = ArticleFormSet(data)
+ self.assertEquals(0, formset.initial_form_count())
+ self.assertEquals(1, formset.total_form_count())
+ self.assertTrue(formset.is_bound)
+ self.assertTrue(formset.forms[0].is_bound)
+ self.assertTrue(formset.is_valid())
+ self.assertTrue(formset.forms[0].is_valid())
+ self.assertEquals([{}], formset.cleaned_data)
+
+
+ def test_form_errors_are_cought_by_formset(self):
+ data = {
+ 'form-TOTAL_FORMS': u'2',
+ 'form-INITIAL_FORMS': u'0',
+ 'form-0-title': u'Test',
+ 'form-0-pub_date': u'1904-06-16',
+ 'form-1-title': u'Test',
+ 'form-1-pub_date': u'', # <-- this date is missing but required
+ }
+ formset = ArticleFormSet(data)
+ self.assertFalse(formset.is_valid())
+ self.assertEquals([{}, {'pub_date': [u'This field is required.']}], formset.errors)