diff options
| author | Simon Charette <charette.s@gmail.com> | 2025-03-09 07:04:16 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2025-03-10 21:09:15 +0100 |
| commit | ab148c02cedbac492f29930dcd5346e1af052635 (patch) | |
| tree | 02125c972c2df1cee48a1740d3f0b945c4e0d864 /tests/force_insert_update | |
| parent | c1257350ca118868bdfc867926dffad38b215162 (diff) | |
Fixed #33579 -- Specialized exception raised on forced update failures.
Raising DatabaseError directly made it harder than it should to
differentiate between IntegrityError when a forced update resulted in no
affected rows.
Introducing a specialized exception allows for callers to more easily
silence, log, or turn them update failures into user facing exceptions
(e.g. 404s).
Thanks Mariusz for the review.
Diffstat (limited to 'tests/force_insert_update')
| -rw-r--r-- | tests/force_insert_update/tests.py | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/tests/force_insert_update/tests.py b/tests/force_insert_update/tests.py index cc223cf3ea..619b8b413d 100644 --- a/tests/force_insert_update/tests.py +++ b/tests/force_insert_update/tests.py @@ -1,3 +1,4 @@ +from django.core.exceptions import ObjectNotUpdated from django.db import DatabaseError, IntegrityError, models, transaction from django.test import TestCase @@ -50,8 +51,14 @@ class ForceTests(TestCase): # the data isn't in the database already. obj = WithCustomPK(name=1, value=1) msg = "Forced update did not affect any rows." - with self.assertRaisesMessage(DatabaseError, msg): - with transaction.atomic(): + # Make sure backward compatibility with DatabaseError is preserved. + exceptions = [DatabaseError, ObjectNotUpdated, WithCustomPK.NotUpdated] + for exception in exceptions: + with ( + self.subTest(exception), + self.assertRaisesMessage(DatabaseError, msg), + transaction.atomic(), + ): obj.save(force_update=True) |
