diff options
| author | Tim Graham <timograham@gmail.com> | 2013-08-01 14:09:47 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2013-08-02 07:41:56 -0400 |
| commit | aa830009de940e31711b4858501becd7f34a1972 (patch) | |
| tree | 03eb9d15f10438209ba235765e51408196494fcb /tests | |
| parent | 31ee1207877578ad683c1d4f3aed47fc6dc7637e (diff) | |
Fixed #17519 -- Fixed missing SQL constraints to proxy models.
Thanks thibaultj for the report, jenh for the patch,
and charettes for the tests.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/backends/models.py | 7 | ||||
| -rw-r--r-- | tests/backends/tests.py | 39 |
2 files changed, 36 insertions, 10 deletions
diff --git a/tests/backends/models.py b/tests/backends/models.py index 4f03ddeacc..1508af4354 100644 --- a/tests/backends/models.py +++ b/tests/backends/models.py @@ -68,11 +68,18 @@ class Reporter(models.Model): return "%s %s" % (self.first_name, self.last_name) +class ReporterProxy(Reporter): + class Meta: + proxy = True + + @python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() reporter = models.ForeignKey(Reporter) + reporter_proxy = models.ForeignKey(ReporterProxy, null=True, + related_name='reporter_proxy') def __str__(self): return self.headline diff --git a/tests/backends/tests.py b/tests/backends/tests.py index 2ad2e1d6d5..d6e3f5c78e 100644 --- a/tests/backends/tests.py +++ b/tests/backends/tests.py @@ -614,12 +614,19 @@ class FkConstraintsTests(TransactionTestCase): Try to create a model instance that violates a FK constraint. If it fails it should fail with IntegrityError. """ - a = models.Article(headline="This is a test", pub_date=datetime.datetime(2005, 7, 27), reporter_id=30) + a1 = models.Article(headline="This is a test", pub_date=datetime.datetime(2005, 7, 27), reporter_id=30) try: - a.save() + a1.save() except IntegrityError: - return - self.skipTest("This backend does not support integrity checks.") + pass + else: + self.skipTest("This backend does not support integrity checks.") + # Now that we know this backend supports integrity checks we make sure + # constraints are also enforced for proxy models. Refs #17519 + a2 = models.Article(headline='This is another test', reporter=self.r, + pub_date=datetime.datetime(2012, 8, 3), + reporter_proxy_id=30) + self.assertRaises(IntegrityError, a2.save) def test_integrity_checks_on_update(self): """ @@ -628,14 +635,26 @@ class FkConstraintsTests(TransactionTestCase): """ # Create an Article. models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r) - # Retrive it from the DB - a = models.Article.objects.get(headline="Test article") - a.reporter_id = 30 + # Retrieve it from the DB + a1 = models.Article.objects.get(headline="Test article") + a1.reporter_id = 30 try: - a.save() + a1.save() except IntegrityError: - return - self.skipTest("This backend does not support integrity checks.") + pass + else: + self.skipTest("This backend does not support integrity checks.") + # Now that we know this backend supports integrity checks we make sure + # constraints are also enforced for proxy models. Refs #17519 + # Create another article + r_proxy = models.ReporterProxy.objects.get(pk=self.r.pk) + models.Article.objects.create(headline='Another article', + pub_date=datetime.datetime(1988, 5, 15), + reporter=self.r, reporter_proxy=r_proxy) + # Retreive the second article from the DB + a2 = models.Article.objects.get(headline='Another article') + a2.reporter_proxy_id = 30 + self.assertRaises(IntegrityError, a2.save) def test_disable_constraint_checks_manually(self): """ |
