Fix Django's QuerySet.delete() behavior for models that use "invalid"
Signed-off-by: James Ren <jamesren@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@4276 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/models_test.py b/frontend/afe/models_test.py
index 8bd8eb7..244aa47 100755
--- a/frontend/afe/models_test.py
+++ b/frontend/afe/models_test.py
@@ -141,5 +141,77 @@
self.assertEquals(entry.execution_path(), '1-autotest_system/subdir')
+class ModelWithInvalidTest(unittest.TestCase,
+ frontend_test_utils.FrontendTestMixin):
+ def setUp(self):
+ self._frontend_common_setup()
+
+
+ def tearDown(self):
+ self._frontend_common_teardown()
+
+
+ def test_model_with_invalid_delete(self):
+ self.assertFalse(self.hosts[0].invalid)
+ self.hosts[0].delete()
+ self.assertTrue(self.hosts[0].invalid)
+ self.assertTrue(models.Host.objects.get(id=self.hosts[0].id))
+
+
+ def test_model_with_invalid_delete_queryset(self):
+ for host in self.hosts:
+ self.assertFalse(host.invalid)
+
+ hosts = models.Host.objects.all()
+ hosts.delete()
+ self.assertEqual(hosts.count(), len(self.hosts))
+
+ for host in hosts:
+ self.assertTrue(host.invalid)
+
+
+ def test_cloned_queryset_delete(self):
+ """
+ Make sure that a cloned queryset maintains the custom delete()
+ """
+ to_delete = ('host1', 'host2')
+
+ for host in self.hosts:
+ self.assertFalse(host.invalid)
+
+ hosts = models.Host.objects.all().filter(hostname__in=to_delete)
+ hosts.delete()
+ all_hosts = models.Host.objects.all()
+ self.assertEqual(all_hosts.count(), len(self.hosts))
+
+ for host in all_hosts:
+ if host.hostname in to_delete:
+ self.assertTrue(
+ host.invalid,
+ '%s.invalid expected to be True' % host.hostname)
+ else:
+ self.assertFalse(
+ host.invalid,
+ '%s.invalid expected to be False' % host.hostname)
+
+
+ def test_normal_delete(self):
+ job = self._create_job(hosts=[1])
+ self.assertEqual(1, models.Job.objects.all().count())
+
+ job.delete()
+ self.assertEqual(0, models.Job.objects.all().count())
+
+
+ def test_normal_delete_queryset(self):
+ self._create_job(hosts=[1])
+ self._create_job(hosts=[2])
+
+ self.assertEqual(2, models.Job.objects.all().count())
+
+ models.Job.objects.all().delete()
+ self.assertEqual(0, models.Job.objects.all().count())
+
+
if __name__ == '__main__':
unittest.main()