summaryrefslogtreecommitdiff
path: root/tests/forms_tests
diff options
context:
space:
mode:
authorDavid Smith <smithdc@gmail.com>2020-04-30 08:34:53 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-06-05 12:01:32 +0200
commit433dd737f94b09043f64b873b0ac067b3f97364b (patch)
tree5c4dcf3c3c7d36008389d28f72c07f70726d65d0 /tests/forms_tests
parentb5aa9cb20f2d8fbffec3bc18aa31fca5f26d6f64 (diff)
Fixed #20347 -- Allowed customizing the maximum number of instantiated forms in formsets.
Co-authored-by: ethurgood <ethurgood@gmail.com>
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