Skip to content

Commit

Permalink
Tests for non DatabaseErrors
Browse files Browse the repository at this point in the history
  • Loading branch information
akaariai committed Sep 23, 2013
1 parent 2c51def commit 530ba8a
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions tests/transactions/tests.py
Expand Up @@ -3,7 +3,9 @@
import sys
from unittest import skipIf, skipUnless

from django.db.models import FieldDoesNotExist
from django.db import connection, transaction, DatabaseError, IntegrityError
from django.db.models.signals import pre_delete
from django.test import TransactionTestCase, skipUnlessDBFeature
from django.test.utils import IgnoreDeprecationWarningsMixin
from django.utils import six
Expand Down Expand Up @@ -364,6 +366,36 @@ def test_failed_save_set_rollback(self):
r2.save(force_update=True)
self.assertEqual(Reporter.objects.get(pk=r1.pk).last_name, 'bar2')

def test_delete_signal_preventing_save(self):
class PreventDeletionException(Exception):
pass

def pre_reporter_delete(*args, **kwargs):
raise PreventDeletionException("Not allowed to delete!")
try:
with transaction.atomic():
pre_delete.connect(pre_reporter_delete, Reporter)
r1 = Reporter.objects.create(first_name='foo', last_name='bar')
try:
r1.delete()
self.fail("Delete should raise Exception from pre_delete")
except PreventDeletionException:
transaction.set_rollback(False)
r1.last_name = 'bar2'
r1.save()
self.assertEqual(Reporter.objects.get(pk=r1.pk).last_name, 'bar2')
finally:
pre_delete.disconnect(pre_reporter_delete, Reporter)

def test_update_invalid_field(self):
with transaction.atomic():
try:
Reporter.objects.update(foobar=1)
except FieldDoesNotExist:
Reporter.objects.create(first_name='foo', last_name='bar')
self.assertEqual(Reporter.objects.count(), 1)


class AtomicMiscTests(TransactionTestCase):

available_apps = []
Expand Down

0 comments on commit 530ba8a

Please sign in to comment.