Fixed #9199 -- We were erroneously only prepending "www" to the domain if we
[django.git] / tests / regressiontests / middleware / tests.py
blobbda9624b6e834077860164392c7603baa50de9c1
1 # -*- coding: utf-8 -*-
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
8 class CommonMiddlewareTest(TestCase):
9 def _get_request(self, path):
10 request = HttpRequest()
11 request.META = {
12 'SERVER_NAME': 'testserver',
13 'SERVER_PORT': 80,
15 request.path = request.path_info = "/middleware/%s" % path
16 return request
18 def test_append_slash_have_slash(self):
19 """
20 Tests that URLs with slashes go unmolested.
21 """
22 settings.APPEND_SLASH = True
23 request = self._get_request('slash/')
24 self.assertEquals(CommonMiddleware().process_request(request), None)
26 def test_append_slash_slashless_resource(self):
27 """
28 Tests that matches to explicit slashless URLs go unmolested.
29 """
30 settings.APPEND_SLASH = True
31 request = self._get_request('noslash')
32 self.assertEquals(CommonMiddleware().process_request(request), None)
34 def test_append_slash_slashless_unknown(self):
35 """
36 Tests that APPEND_SLASH doesn't redirect to unknown resources.
37 """
38 settings.APPEND_SLASH = True
39 request = self._get_request('unknown')
40 self.assertEquals(CommonMiddleware().process_request(request), None)
42 def test_append_slash_redirect(self):
43 """
44 Tests that APPEND_SLASH redirects slashless URLs to a valid pattern.
45 """
46 settings.APPEND_SLASH = True
47 request = self._get_request('slash')
48 r = CommonMiddleware().process_request(request)
49 self.assertEquals(r.status_code, 301)
50 self.assertEquals(r['Location'], 'http://testserver/middleware/slash/')
52 def test_append_slash_no_redirect_on_POST_in_DEBUG(self):
53 """
54 Tests that while in debug mode, an exception is raised with a warning
55 when a failed attempt is made to POST to an URL which would normally be
56 redirected to a slashed version.
57 """
58 settings.APPEND_SLASH = True
59 settings.DEBUG = True
60 request = self._get_request('slash')
61 request.method = 'POST'
62 self.assertRaises(
63 RuntimeError,
64 CommonMiddleware().process_request,
65 request)
66 try:
67 CommonMiddleware().process_request(request)
68 except RuntimeError, e:
69 self.failUnless('end in a slash' in str(e))
70 settings.DEBUG = False
72 def test_append_slash_disabled(self):
73 """
74 Tests disabling append slash functionality.
75 """
76 settings.APPEND_SLASH = False
77 request = self._get_request('slash')
78 self.assertEquals(CommonMiddleware().process_request(request), None)
80 def test_append_slash_quoted(self):
81 """
82 Tests that URLs which require quoting are redirected to their slash
83 version ok.
84 """
85 settings.APPEND_SLASH = True
86 request = self._get_request('needsquoting#')
87 r = CommonMiddleware().process_request(request)
88 self.assertEquals(r.status_code, 301)
89 self.assertEquals(
90 r['Location'],
91 'http://testserver/middleware/needsquoting%23/')
93 def test_prepend_www(self):
94 settings.PREPEND_WWW = True
95 settings.APPEND_SLASH = False
96 request = self._get_request('path/')
97 r = CommonMiddleware().process_request(request)
98 self.assertEquals(r.status_code, 301)
99 self.assertEquals(
100 r['Location'],
101 'http://www.testserver/middleware/path/')
103 def test_prepend_www_append_slash_have_slash(self):
104 settings.PREPEND_WWW = True
105 settings.APPEND_SLASH = True
106 request = self._get_request('slash/')
107 r = CommonMiddleware().process_request(request)
108 self.assertEquals(r.status_code, 301)
109 self.assertEquals(r['Location'],
110 'http://www.testserver/middleware/slash/')
112 def test_prepend_www_append_slash_slashless(self):
113 settings.PREPEND_WWW = True
114 settings.APPEND_SLASH = True
115 request = self._get_request('slash')
116 r = CommonMiddleware().process_request(request)
117 self.assertEquals(r.status_code, 301)
118 self.assertEquals(r['Location'],
119 'http://www.testserver/middleware/slash/')