summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2013-08-01 14:09:47 -0400
committerTim Graham <timograham@gmail.com>2013-08-02 08:42:19 -0400
commit196cc875b26f266e8f8dfd5be9daa0b8f246b9cd (patch)
tree6de2bf6cb866c024fc9148d8beca8355d9290ea0 /tests
parentb3e54f4a01dd410a87bc3d0669cb7b36aa74e7a8 (diff)
[1.6.x] Fixed #17519 -- Fixed missing SQL constraints to proxy models.
Thanks thibaultj for the report, jenh for the patch, and charettes for the tests. Backport of aa830009de from master
Diffstat (limited to 'tests')
-rw-r--r--tests/backends/models.py7
-rw-r--r--tests/backends/tests.py39
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 b196133a68..b018d2a210 100644
--- a/tests/backends/tests.py
+++ b/tests/backends/tests.py
@@ -613,12 +613,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):
"""
@@ -627,14 +634,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):
"""