summaryrefslogtreecommitdiff
path: root/tests/forms_tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/forms_tests')
-rw-r--r--tests/forms_tests/tests/test_formsets.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/forms_tests/tests/test_formsets.py b/tests/forms_tests/tests/test_formsets.py
index 117b50fa7c..e44b347802 100644
--- a/tests/forms_tests/tests/test_formsets.py
+++ b/tests/forms_tests/tests/test_formsets.py
@@ -892,6 +892,55 @@ class FormsFormsetTestCase(SimpleTestCase):
)
self.assertEqual(formset.absolute_max, 2000)
+ def test_absolute_max(self):
+ data = {
+ 'form-TOTAL_FORMS': '2001',
+ 'form-INITIAL_FORMS': '0',
+ 'form-MAX_NUM_FORMS': '0',
+ }
+ AbsoluteMaxFavoriteDrinksFormSet = formset_factory(
+ FavoriteDrinkForm,
+ absolute_max=3000,
+ )
+ formset = AbsoluteMaxFavoriteDrinksFormSet(data=data)
+ self.assertIs(formset.is_valid(), True)
+ self.assertEqual(len(formset.forms), 2001)
+ # absolute_max provides a hard limit.
+ data['form-TOTAL_FORMS'] = '3001'
+ formset = AbsoluteMaxFavoriteDrinksFormSet(data=data)
+ self.assertIs(formset.is_valid(), False)
+ self.assertEqual(len(formset.forms), 3000)
+ self.assertEqual(
+ formset.non_form_errors(),
+ ['Please submit 1000 or fewer forms.'],
+ )
+
+ def test_absolute_max_with_max_num(self):
+ data = {
+ 'form-TOTAL_FORMS': '1001',
+ 'form-INITIAL_FORMS': '0',
+ 'form-MAX_NUM_FORMS': '0',
+ }
+ LimitedFavoriteDrinksFormSet = formset_factory(
+ FavoriteDrinkForm,
+ max_num=30,
+ absolute_max=1000,
+ )
+ formset = LimitedFavoriteDrinksFormSet(data=data)
+ self.assertIs(formset.is_valid(), False)
+ self.assertEqual(len(formset.forms), 1000)
+ self.assertEqual(
+ formset.non_form_errors(),
+ ['Please submit 30 or fewer forms.'],
+ )
+
+ def test_absolute_max_invalid(self):
+ msg = "'absolute_max' must be greater or equal to 'max_num'."
+ for max_num in [None, 31]:
+ with self.subTest(max_num=max_num):
+ with self.assertRaisesMessage(ValueError, msg):
+ formset_factory(FavoriteDrinkForm, max_num=max_num, absolute_max=30)
+
def test_more_initial_form_result_in_one(self):
"""
One form from initial and extra=3 with max_num=2 results in the one