Explorar el Código

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

The ticket's issue was already fixed by patch for #14877.
Ole Laursen hace 11 años
padre
commit
f4f01fb03c
Se han modificado 1 ficheros con 30 adiciones y 0 borrados
  1. 30 0
      tests/model_formsets/tests.py

+ 30 - 0
tests/model_formsets/tests.py

@@ -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()