summaryrefslogtreecommitdiff
path: root/tests/delete
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2020-01-25 15:56:30 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-01-27 12:21:02 +0100
commitab3cbd8b9a315911248227208630a020cedca08f (patch)
tree94eb7a61d406074fa7696a8c89e78cb4ba9e8195 /tests/delete
parente348ab0d4382b0d7cb0cab9d1261c916c3d0ce6c (diff)
Refs #27852 -- Fixed object deletion to show all protected related objects rather than just the first one.
Thanks Anton Samarchyan for the initial patch.
Diffstat (limited to 'tests/delete')
-rw-r--r--tests/delete/models.py4
-rw-r--r--tests/delete/tests.py19
2 files changed, 20 insertions, 3 deletions
diff --git a/tests/delete/models.py b/tests/delete/models.py
index 7a38ecc777..618b36bda9 100644
--- a/tests/delete/models.py
+++ b/tests/delete/models.py
@@ -68,6 +68,10 @@ class A(models.Model):
o2o_setnull = models.ForeignKey(R, models.SET_NULL, null=True, related_name="o2o_nullable_set")
+class B(models.Model):
+ protect = models.ForeignKey(R, models.PROTECT)
+
+
def create_a(name):
a = A(name=name)
for name in ('auto', 'auto_nullable', 'setvalue', 'setnull', 'setdefault',
diff --git a/tests/delete/tests.py b/tests/delete/tests.py
index b93bdd5265..5046afba17 100644
--- a/tests/delete/tests.py
+++ b/tests/delete/tests.py
@@ -1,12 +1,14 @@
from math import ceil
from django.db import IntegrityError, connection, models
-from django.db.models.deletion import Collector, RestrictedError
+from django.db.models.deletion import (
+ Collector, ProtectedError, RestrictedError,
+)
from django.db.models.sql.constants import GET_ITERATOR_CHUNK_SIZE
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
from .models import (
- B1, B2, MR, A, Avatar, Base, Child, DeleteBottom, DeleteTop, GenericB1,
+ B1, B2, MR, A, Avatar, B, Base, Child, DeleteBottom, DeleteTop, GenericB1,
GenericB2, GenericDeleteBottom, HiddenUser, HiddenUserProfile, M, M2MFrom,
M2MTo, MRNull, Origin, P, Parent, R, RChild, RChildChild, Referrer, S, T,
User, create_a, get_default_r,
@@ -72,11 +74,22 @@ class OnDeleteTests(TestCase):
a = create_a('protect')
msg = (
"Cannot delete some instances of model 'R' because they are "
- "referenced through a protected foreign key: 'A.protect'"
+ "referenced through protected foreign keys: 'A.protect'."
)
with self.assertRaisesMessage(IntegrityError, msg):
a.protect.delete()
+ def test_protect_multiple(self):
+ a = create_a('protect')
+ B.objects.create(protect=a.protect)
+ msg = (
+ "Cannot delete some instances of model 'R' because they are "
+ "referenced through protected foreign keys: 'A.protect', "
+ "'B.protect'."
+ )
+ with self.assertRaisesMessage(ProtectedError, msg):
+ a.protect.delete()
+
def test_do_nothing(self):
# Testing DO_NOTHING is a bit harder: It would raise IntegrityError for a normal model,
# so we connect to pre_delete and set the fk to a known value.