summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2013-02-10 17:06:52 +0200
committerAnssi Kääriäinen <akaariai@gmail.com>2013-02-10 17:34:27 +0200
commit498a5de07bd325628c9bd7a804144a9f714ca721 (patch)
treee6e49fef82907185192b9a2c18ebf8564eeccd25
parent056b2b5f65e6b12c609dbd064cbe1e44a8730bf7 (diff)
[1.4.x] Fixed #19645 -- Added tests for TransactionMiddleware
Backpatch of f556df90be995a83b979cf875705d98521ab4dc7. Backpatching these tests so that it will be easier to backpatch the fix for #19707.
-rw-r--r--tests/regressiontests/middleware/models.py12
-rw-r--r--tests/regressiontests/middleware/tests.py49
2 files changed, 59 insertions, 2 deletions
diff --git a/tests/regressiontests/middleware/models.py b/tests/regressiontests/middleware/models.py
index 71abcc5198..1e14da4683 100644
--- a/tests/regressiontests/middleware/models.py
+++ b/tests/regressiontests/middleware/models.py
@@ -1 +1,11 @@
-# models.py file for tests to run.
+from django.db import models
+
+
+class Band(models.Model):
+ name = models.CharField(max_length=100)
+
+ class Meta:
+ ordering = ('name',)
+
+ def __unicode__(self):
+ return self.name
diff --git a/tests/regressiontests/middleware/tests.py b/tests/regressiontests/middleware/tests.py
index 6a1896a266..00e4e3ecc1 100644
--- a/tests/regressiontests/middleware/tests.py
+++ b/tests/regressiontests/middleware/tests.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+from __future__ import absolute_import, with_statement
import gzip
import re
@@ -7,15 +8,19 @@ import StringIO
from django.conf import settings
from django.core import mail
+from django.db import transaction
from django.http import HttpRequest
from django.http import HttpResponse
from django.middleware.clickjacking import XFrameOptionsMiddleware
from django.middleware.common import CommonMiddleware
from django.middleware.http import ConditionalGetMiddleware
from django.middleware.gzip import GZipMiddleware
-from django.test import TestCase, RequestFactory
+from django.middleware.transaction import TransactionMiddleware
+from django.test import TransactionTestCase, TestCase, RequestFactory
from django.test.utils import override_settings
+from .models import Band
+
class CommonMiddlewareTest(TestCase):
def setUp(self):
self.append_slash = settings.APPEND_SLASH
@@ -613,3 +618,45 @@ class ETagGZipMiddlewareTest(TestCase):
ETagGZipMiddlewareTest = override_settings(
USE_ETAGS=True,
)(ETagGZipMiddlewareTest)
+
+class TransactionMiddlewareTest(TransactionTestCase):
+ """
+ Test the transaction middleware.
+ """
+ def setUp(self):
+ self.request = HttpRequest()
+ self.request.META = {
+ 'SERVER_NAME': 'testserver',
+ 'SERVER_PORT': 80,
+ }
+ self.request.path = self.request.path_info = "/"
+ self.response = HttpResponse()
+ self.response.status_code = 200
+
+ def test_request(self):
+ TransactionMiddleware().process_request(self.request)
+ self.assertTrue(transaction.is_managed())
+
+ def test_managed_response(self):
+ transaction.enter_transaction_management()
+ transaction.managed(True)
+ Band.objects.create(name='The Beatles')
+ self.assertTrue(transaction.is_dirty())
+ TransactionMiddleware().process_response(self.request, self.response)
+ self.assertFalse(transaction.is_dirty())
+ self.assertEqual(Band.objects.count(), 1)
+
+ def test_unmanaged_response(self):
+ transaction.managed(False)
+ TransactionMiddleware().process_response(self.request, self.response)
+ self.assertFalse(transaction.is_managed())
+ self.assertFalse(transaction.is_dirty())
+
+ def test_exception(self):
+ transaction.enter_transaction_management()
+ transaction.managed(True)
+ Band.objects.create(name='The Beatles')
+ self.assertTrue(transaction.is_dirty())
+ TransactionMiddleware().process_exception(self.request, None)
+ self.assertEqual(Band.objects.count(), 0)
+ self.assertFalse(transaction.is_dirty())