diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2020-01-25 15:56:30 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-01-27 12:21:02 +0100 |
| commit | ab3cbd8b9a315911248227208630a020cedca08f (patch) | |
| tree | 94eb7a61d406074fa7696a8c89e78cb4ba9e8195 /tests/delete | |
| parent | e348ab0d4382b0d7cb0cab9d1261c916c3d0ce6c (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.py | 4 | ||||
| -rw-r--r-- | tests/delete/tests.py | 19 |
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. |
