mirror of
				https://github.com/django/django.git
				synced 2025-10-29 08:36:09 +00:00 
			
		
		
		
	this with proper setUp() and tearDown() methods. git-svn-id: http://code.djangoproject.com/svn/django/trunk@9200 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			128 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| from django.test import TestCase
 | |
| from django.http import HttpRequest
 | |
| from django.middleware.common import CommonMiddleware
 | |
| from django.conf import settings
 | |
| 
 | |
| class CommonMiddlewareTest(TestCase):
 | |
|     def setUp(self):
 | |
|         self.slash = settings.APPEND_SLASH
 | |
|         self.www = settings.PREPEND_WWW
 | |
| 
 | |
|     def tearDown(self):
 | |
|         settings.APPEND_SLASH = self.slash
 | |
|         settings.PREPEND_WWW = self.www
 | |
| 
 | |
|     def _get_request(self, path):
 | |
|         request = HttpRequest()
 | |
|         request.META = {
 | |
|             'SERVER_NAME': 'testserver',
 | |
|             'SERVER_PORT': 80,
 | |
|         }
 | |
|         request.path = request.path_info = "/middleware/%s" % path
 | |
|         return request
 | |
| 
 | |
|     def test_append_slash_have_slash(self):
 | |
|         """
 | |
|         Tests that URLs with slashes go unmolested.
 | |
|         """
 | |
|         settings.APPEND_SLASH = True
 | |
|         request = self._get_request('slash/')
 | |
|         self.assertEquals(CommonMiddleware().process_request(request), None)
 | |
| 
 | |
|     def test_append_slash_slashless_resource(self):
 | |
|         """
 | |
|         Tests that matches to explicit slashless URLs go unmolested.
 | |
|         """
 | |
|         settings.APPEND_SLASH = True
 | |
|         request = self._get_request('noslash')
 | |
|         self.assertEquals(CommonMiddleware().process_request(request), None)
 | |
| 
 | |
|     def test_append_slash_slashless_unknown(self):
 | |
|         """
 | |
|         Tests that APPEND_SLASH doesn't redirect to unknown resources.
 | |
|         """
 | |
|         settings.APPEND_SLASH = True
 | |
|         request = self._get_request('unknown')
 | |
|         self.assertEquals(CommonMiddleware().process_request(request), None)
 | |
| 
 | |
|     def test_append_slash_redirect(self):
 | |
|         """
 | |
|         Tests that APPEND_SLASH redirects slashless URLs to a valid pattern.
 | |
|         """
 | |
|         settings.APPEND_SLASH = True
 | |
|         request = self._get_request('slash')
 | |
|         r = CommonMiddleware().process_request(request)
 | |
|         self.assertEquals(r.status_code, 301)
 | |
|         self.assertEquals(r['Location'], 'http://testserver/middleware/slash/')
 | |
| 
 | |
|     def test_append_slash_no_redirect_on_POST_in_DEBUG(self):
 | |
|         """
 | |
|         Tests that while in debug mode, an exception is raised with a warning
 | |
|         when a failed attempt is made to POST to an URL which would normally be
 | |
|         redirected to a slashed version.
 | |
|         """
 | |
|         settings.APPEND_SLASH = True
 | |
|         settings.DEBUG = True
 | |
|         request = self._get_request('slash')
 | |
|         request.method = 'POST'
 | |
|         self.assertRaises(
 | |
|             RuntimeError,
 | |
|             CommonMiddleware().process_request,
 | |
|             request)
 | |
|         try:
 | |
|             CommonMiddleware().process_request(request)
 | |
|         except RuntimeError, e:
 | |
|             self.failUnless('end in a slash' in str(e))
 | |
|         settings.DEBUG = False
 | |
| 
 | |
|     def test_append_slash_disabled(self):
 | |
|         """
 | |
|         Tests disabling append slash functionality.
 | |
|         """
 | |
|         settings.APPEND_SLASH = False
 | |
|         request = self._get_request('slash')
 | |
|         self.assertEquals(CommonMiddleware().process_request(request), None)
 | |
| 
 | |
|     def test_append_slash_quoted(self):
 | |
|         """
 | |
|         Tests that URLs which require quoting are redirected to their slash
 | |
|         version ok.
 | |
|         """
 | |
|         settings.APPEND_SLASH = True
 | |
|         request = self._get_request('needsquoting#')
 | |
|         r = CommonMiddleware().process_request(request)
 | |
|         self.assertEquals(r.status_code, 301)
 | |
|         self.assertEquals(
 | |
|             r['Location'],
 | |
|             'http://testserver/middleware/needsquoting%23/')
 | |
| 
 | |
|     def test_prepend_www(self):
 | |
|         settings.PREPEND_WWW = True
 | |
|         settings.APPEND_SLASH = False
 | |
|         request = self._get_request('path/')
 | |
|         r = CommonMiddleware().process_request(request)
 | |
|         self.assertEquals(r.status_code, 301)
 | |
|         self.assertEquals(
 | |
|             r['Location'],
 | |
|             'http://www.testserver/middleware/path/')
 | |
| 
 | |
|     def test_prepend_www_append_slash_have_slash(self):
 | |
|         settings.PREPEND_WWW = True
 | |
|         settings.APPEND_SLASH = True
 | |
|         request = self._get_request('slash/')
 | |
|         r = CommonMiddleware().process_request(request)
 | |
|         self.assertEquals(r.status_code, 301)
 | |
|         self.assertEquals(r['Location'],
 | |
|                           'http://www.testserver/middleware/slash/')
 | |
| 
 | |
|     def test_prepend_www_append_slash_slashless(self):
 | |
|         settings.PREPEND_WWW = True
 | |
|         settings.APPEND_SLASH = True
 | |
|         request = self._get_request('slash')
 | |
|         r = CommonMiddleware().process_request(request)
 | |
|         self.assertEquals(r.status_code, 301)
 | |
|         self.assertEquals(r['Location'],
 | |
|                           'http://www.testserver/middleware/slash/')
 |