Commit f4f01fb0 authored by Ole Laursen's avatar Ole Laursen Committed by Anssi Kääriäinen
Browse files

Fixed #18508 -- tests for repeated deletion bug in ModelFormSet

The ticket's issue was already fixed by patch for #14877.
parent c64efe37
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -100,6 +100,36 @@ class DeletionTests(TestCase):
        formset.save()
        self.assertEqual(Poet.objects.count(), 0)

    def test_outdated_deletion(self):
        poet = Poet.objects.create(name='test')
        poem = Poem.objects.create(name='Brevity is the soul of wit', poet=poet)

        PoemFormSet = inlineformset_factory(Poet, Poem, fields="__all__", can_delete=True)

        # Simulate deletion of an object that doesn't exist in the database
        data = {
            'form-TOTAL_FORMS': '2',
            'form-INITIAL_FORMS': '2',
            'form-0-id': str(poem.pk),
            'form-0-name': 'foo',
            'form-1-id': str(poem.pk + 1),  # doesn't exist
            'form-1-name': 'bar',
            'form-1-DELETE': 'on',
        }
        formset = PoemFormSet(data, instance=poet, prefix="form")

        # The formset is valid even though poem.pk + 1 doesn't exist,
        # because it's marked for deletion anyway
        self.assertTrue(formset.is_valid())

        formset.save()

        # Make sure the save went through correctly
        self.assertEqual(Poem.objects.get(pk=poem.pk).name, "foo")
        self.assertEqual(poet.poem_set.count(), 1)
        self.assertFalse(Poem.objects.filter(pk=poem.pk + 1).exists())


class ModelFormsetTest(TestCase):
    def test_simple_save(self):
        qs = Author.objects.all()