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()
12 'SERVER_NAME': 'testserver',
15 request
.path
= request
.path_info
= "/middleware/%s" % path
18 def test_append_slash_have_slash(self
):
20 Tests that URLs with slashes go unmolested.
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
):
28 Tests that matches to explicit slashless URLs go unmolested.
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
):
36 Tests that APPEND_SLASH doesn't redirect to unknown resources.
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
):
44 Tests that APPEND_SLASH redirects slashless URLs to a valid pattern.
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
):
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.
58 settings
.APPEND_SLASH
= True
60 request
= self
._get
_request
('slash')
61 request
.method
= 'POST'
64 CommonMiddleware().process_request
,
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
):
74 Tests disabling append slash functionality.
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
):
82 Tests that URLs which require quoting are redirected to their slash
85 settings
.APPEND_SLASH
= True
86 request
= self
._get
_request
('needsquoting#')
87 r
= CommonMiddleware().process_request(request
)
88 self
.assertEquals(r
.status_code
, 301)
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)
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/')