diff options
| author | David Smith <smithdc@gmail.com> | 2020-04-30 08:34:53 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-06-05 12:01:32 +0200 |
| commit | 433dd737f94b09043f64b873b0ac067b3f97364b (patch) | |
| tree | 5c4dcf3c3c7d36008389d28f72c07f70726d65d0 /tests/forms_tests | |
| parent | b5aa9cb20f2d8fbffec3bc18aa31fca5f26d6f64 (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.py | 49 |
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 |
