~ubuntu-branches/ubuntu/saucy/python-django/saucy-updates

« back to all changes in this revision

Viewing changes to tests/regressiontests/middleware/tests.py

  • Committer: Package Import Robot
  • Author(s): Raphaël Hertzog
  • Date: 2013-02-24 10:28:08 UTC
  • mfrom: (1.2.17)
  • mto: This revision was merged to the branch mainline in revision 45.
  • Revision ID: package-import@ubuntu.com-20130224102808-jx3ea5pnoefkzu94
Tags: upstream-1.4.5
Import upstream version 1.4.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# -*- coding: utf-8 -*-
 
2
from __future__ import absolute_import, with_statement
2
3
 
3
4
import gzip
4
5
import re
7
8
 
8
9
from django.conf import settings
9
10
from django.core import mail
 
11
from django.db import (transaction, connections, DEFAULT_DB_ALIAS,
 
12
                       IntegrityError)
10
13
from django.http import HttpRequest
11
14
from django.http import HttpResponse
12
15
from django.middleware.clickjacking import XFrameOptionsMiddleware
13
16
from django.middleware.common import CommonMiddleware
14
17
from django.middleware.http import ConditionalGetMiddleware
15
18
from django.middleware.gzip import GZipMiddleware
16
 
from django.test import TestCase, RequestFactory
 
19
from django.middleware.transaction import TransactionMiddleware
 
20
from django.test import TransactionTestCase, TestCase, RequestFactory
17
21
from django.test.utils import override_settings
18
22
 
 
23
from .models import Band
 
24
 
19
25
class CommonMiddlewareTest(TestCase):
20
26
    def setUp(self):
21
27
        self.append_slash = settings.APPEND_SLASH
613
619
ETagGZipMiddlewareTest = override_settings(
614
620
    USE_ETAGS=True,
615
621
)(ETagGZipMiddlewareTest)
 
622
 
 
623
class TransactionMiddlewareTest(TransactionTestCase):
 
624
    """
 
625
    Test the transaction middleware.
 
626
    """
 
627
    def setUp(self):
 
628
        self.request = HttpRequest()
 
629
        self.request.META = {
 
630
            'SERVER_NAME': 'testserver',
 
631
            'SERVER_PORT': 80,
 
632
        }
 
633
        self.request.path = self.request.path_info = "/"
 
634
        self.response = HttpResponse()
 
635
        self.response.status_code = 200
 
636
 
 
637
    def test_request(self):
 
638
        TransactionMiddleware().process_request(self.request)
 
639
        self.assertTrue(transaction.is_managed())
 
640
 
 
641
    def test_managed_response(self):
 
642
        transaction.enter_transaction_management()
 
643
        transaction.managed(True)
 
644
        Band.objects.create(name='The Beatles')
 
645
        self.assertTrue(transaction.is_dirty())
 
646
        TransactionMiddleware().process_response(self.request, self.response)
 
647
        self.assertFalse(transaction.is_dirty())
 
648
        self.assertEqual(Band.objects.count(), 1)
 
649
 
 
650
    def test_unmanaged_response(self):
 
651
        transaction.managed(False)
 
652
        TransactionMiddleware().process_response(self.request, self.response)
 
653
        self.assertFalse(transaction.is_managed())
 
654
        self.assertFalse(transaction.is_dirty())
 
655
 
 
656
    def test_exception(self):
 
657
        transaction.enter_transaction_management()
 
658
        transaction.managed(True)
 
659
        Band.objects.create(name='The Beatles')
 
660
        self.assertTrue(transaction.is_dirty())
 
661
        TransactionMiddleware().process_exception(self.request, None)
 
662
        self.assertEqual(Band.objects.count(), 0)
 
663
        self.assertFalse(transaction.is_dirty())
 
664
 
 
665
    def test_failing_commit(self):
 
666
        # It is possible that connection.commit() fails. Check that
 
667
        # TransactionMiddleware handles such cases correctly.
 
668
        try:
 
669
            def raise_exception():
 
670
                raise IntegrityError()
 
671
            connections[DEFAULT_DB_ALIAS].commit = raise_exception
 
672
            transaction.enter_transaction_management()
 
673
            transaction.managed(True)
 
674
            Band.objects.create(name='The Beatles')
 
675
            self.assertTrue(transaction.is_dirty())
 
676
            with self.assertRaises(IntegrityError):
 
677
                TransactionMiddleware().process_response(self.request, None)
 
678
            self.assertEqual(Band.objects.count(), 0)
 
679
            self.assertFalse(transaction.is_dirty())
 
680
            self.assertFalse(transaction.is_managed())
 
681
        finally:
 
682
            del connections[DEFAULT_DB_ALIAS].commit