Django

Code

root/django/trunk/tests/regressiontests/middleware/tests.py

Revision 9200, 4.5 kB (checked in by mtredinnick, 4 days ago)

The tests added in r9184 were altering the test environment in bad ways. Fixed
this with proper setUp() and tearDown() methods.

  • Property svn:eol-style set to native
Line 
1 # -*- coding: utf-8 -*-
2
3 from django.test import TestCase
4 from django.http import HttpRequest
5 from django.middleware.common import CommonMiddleware
6 from django.conf import settings
7
8 class CommonMiddlewareTest(TestCase):
9     def setUp(self):
10         self.slash = settings.APPEND_SLASH
11         self.www = settings.PREPEND_WWW
12
13     def tearDown(self):
14         settings.APPEND_SLASH = self.slash
15         settings.PREPEND_WWW = self.www
16
17     def _get_request(self, path):
18         request = HttpRequest()
19         request.META = {
20             'SERVER_NAME': 'testserver',
21             'SERVER_PORT': 80,
22         }
23         request.path = request.path_info = "/middleware/%s" % path
24         return request
25
26     def test_append_slash_have_slash(self):
27         """
28         Tests that URLs with slashes go unmolested.
29         """
30         settings.APPEND_SLASH = True
31         request = self._get_request('slash/')
32         self.assertEquals(CommonMiddleware().process_request(request), None)
33
34     def test_append_slash_slashless_resource(self):
35         """
36         Tests that matches to explicit slashless URLs go unmolested.
37         """
38         settings.APPEND_SLASH = True
39         request = self._get_request('noslash')
40         self.assertEquals(CommonMiddleware().process_request(request), None)
41
42     def test_append_slash_slashless_unknown(self):
43         """
44         Tests that APPEND_SLASH doesn't redirect to unknown resources.
45         """
46         settings.APPEND_SLASH = True
47         request = self._get_request('unknown')
48         self.assertEquals(CommonMiddleware().process_request(request), None)
49
50     def test_append_slash_redirect(self):
51         """
52         Tests that APPEND_SLASH redirects slashless URLs to a valid pattern.
53         """
54         settings.APPEND_SLASH = True
55         request = self._get_request('slash')
56         r = CommonMiddleware().process_request(request)
57         self.assertEquals(r.status_code, 301)
58         self.assertEquals(r['Location'], 'http://testserver/middleware/slash/')
59
60     def test_append_slash_no_redirect_on_POST_in_DEBUG(self):
61         """
62         Tests that while in debug mode, an exception is raised with a warning
63         when a failed attempt is made to POST to an URL which would normally be
64         redirected to a slashed version.
65         """
66         settings.APPEND_SLASH = True
67         settings.DEBUG = True
68         request = self._get_request('slash')
69         request.method = 'POST'
70         self.assertRaises(
71             RuntimeError,
72             CommonMiddleware().process_request,
73             request)
74         try:
75             CommonMiddleware().process_request(request)
76         except RuntimeError, e:
77             self.failUnless('end in a slash' in str(e))
78         settings.DEBUG = False
79
80     def test_append_slash_disabled(self):
81         """
82         Tests disabling append slash functionality.
83         """
84         settings.APPEND_SLASH = False
85         request = self._get_request('slash')
86         self.assertEquals(CommonMiddleware().process_request(request), None)
87
88     def test_append_slash_quoted(self):
89         """
90         Tests that URLs which require quoting are redirected to their slash
91         version ok.
92         """
93         settings.APPEND_SLASH = True
94         request = self._get_request('needsquoting#')
95         r = CommonMiddleware().process_request(request)
96         self.assertEquals(r.status_code, 301)
97         self.assertEquals(
98             r['Location'],
99             'http://testserver/middleware/needsquoting%23/')
100
101     def test_prepend_www(self):
102         settings.PREPEND_WWW = True
103         settings.APPEND_SLASH = False
104         request = self._get_request('path/')
105         r = CommonMiddleware().process_request(request)
106         self.assertEquals(r.status_code, 301)
107         self.assertEquals(
108             r['Location'],
109             'http://www.testserver/middleware/path/')
110
111     def test_prepend_www_append_slash_have_slash(self):
112         settings.PREPEND_WWW = True
113         settings.APPEND_SLASH = True
114         request = self._get_request('slash/')
115         r = CommonMiddleware().process_request(request)
116         self.assertEquals(r.status_code, 301)
117         self.assertEquals(r['Location'],
118                           'http://www.testserver/middleware/slash/')
119
120     def test_prepend_www_append_slash_slashless(self):
121         settings.PREPEND_WWW = True
122         settings.APPEND_SLASH = True
123         request = self._get_request('slash')
124         r = CommonMiddleware().process_request(request)
125         self.assertEquals(r.status_code, 301)
126         self.assertEquals(r['Location'],
127                           'http://www.testserver/middleware/slash/')
Note: See TracBrowser for help on using the browser.