mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 01:47:59 +03:00 
			
		
		
		
	Tests for MSIE accept header munging
This commit is contained in:
		
							parent
							
								
									0c6f682cd0
								
							
						
					
					
						commit
						e198165989
					
				| 
						 | 
				
			
			@ -38,7 +38,7 @@ class BasicAuthenticator(BaseAuthenticator):
 | 
			
		|||
class UserLoggedInAuthenticator(BaseAuthenticator):
 | 
			
		||||
    """Use Djagno's built-in request session for authentication."""
 | 
			
		||||
    def authenticate(self, request):
 | 
			
		||||
        if request.user and request.user.is_active:
 | 
			
		||||
        if getattr(request, 'user', None) and request.user.is_active:
 | 
			
		||||
            return request.user
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								djangorestframework/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								djangorestframework/models.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
# Just to keep things like ./manage.py test happy
 | 
			
		||||
							
								
								
									
										85
									
								
								djangorestframework/tests.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								djangorestframework/tests.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,85 @@
 | 
			
		|||
from django.test import Client, TestCase
 | 
			
		||||
from django.core.handlers.wsgi import WSGIRequest
 | 
			
		||||
from djangorestframework.resource import Resource
 | 
			
		||||
 | 
			
		||||
# From: http://djangosnippets.org/snippets/963/
 | 
			
		||||
class RequestFactory(Client):
 | 
			
		||||
    """
 | 
			
		||||
    Class that lets you create mock Request objects for use in testing.
 | 
			
		||||
    
 | 
			
		||||
    Usage:
 | 
			
		||||
    
 | 
			
		||||
    rf = RequestFactory()
 | 
			
		||||
    get_request = rf.get('/hello/')
 | 
			
		||||
    post_request = rf.post('/submit/', {'foo': 'bar'})
 | 
			
		||||
    
 | 
			
		||||
    This class re-uses the django.test.client.Client interface, docs here:
 | 
			
		||||
    http://www.djangoproject.com/documentation/testing/#the-test-client
 | 
			
		||||
    
 | 
			
		||||
    Once you have a request object you can pass it to any view function, 
 | 
			
		||||
    just as if that view had been hooked up using a URLconf.
 | 
			
		||||
    
 | 
			
		||||
    """
 | 
			
		||||
    def request(self, **request):
 | 
			
		||||
        """
 | 
			
		||||
        Similar to parent class, but returns the request object as soon as it
 | 
			
		||||
        has created it.
 | 
			
		||||
        """
 | 
			
		||||
        environ = {
 | 
			
		||||
            'HTTP_COOKIE': self.cookies,
 | 
			
		||||
            'PATH_INFO': '/',
 | 
			
		||||
            'QUERY_STRING': '',
 | 
			
		||||
            'REQUEST_METHOD': 'GET',
 | 
			
		||||
            'SCRIPT_NAME': '',
 | 
			
		||||
            'SERVER_NAME': 'testserver',
 | 
			
		||||
            'SERVER_PORT': 80,
 | 
			
		||||
            'SERVER_PROTOCOL': 'HTTP/1.1',
 | 
			
		||||
        }
 | 
			
		||||
        environ.update(self.defaults)
 | 
			
		||||
        environ.update(request)
 | 
			
		||||
        return WSGIRequest(environ)
 | 
			
		||||
 | 
			
		||||
# See: http://www.useragentstring.com/
 | 
			
		||||
MSIE_9_USER_AGENT = 'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))'
 | 
			
		||||
MSIE_8_USER_AGENT = 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)'
 | 
			
		||||
MSIE_7_USER_AGENT = 'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)'
 | 
			
		||||
FIREFOX_4_0_USER_AGENT = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)'
 | 
			
		||||
CHROME_11_0_USER_AGENT = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.655.0 Safari/534.17'
 | 
			
		||||
SAFARI_5_0_USER_AGENT = 'Mozilla/5.0 (X11; U; Linux x86_64; en-ca) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/531.2+'
 | 
			
		||||
OPERA_11_0_MSIE_USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 8.0; X11; Linux x86_64; pl) Opera 11.00'
 | 
			
		||||
OPERA_11_0_OPERA_USER_AGENT = 'Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00'
 | 
			
		||||
 | 
			
		||||
class UserAgentMungingTest(TestCase):
 | 
			
		||||
    """"""
 | 
			
		||||
 | 
			
		||||
    class MockResource(Resource):
 | 
			
		||||
        anon_allowed_methods = allowed_methods = ('GET',)
 | 
			
		||||
        def get(self, request, auth):
 | 
			
		||||
            return {'a':1, 'b':2, 'c':3}
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.rf = RequestFactory()
 | 
			
		||||
 | 
			
		||||
    def test_msie8_ua_munge_accept(self):
 | 
			
		||||
        """Send MSIE user agent strings and ensure that we get an HTML response,
 | 
			
		||||
        even if we set a */* accept header.  (Which MSIE annoyingly does)"""
 | 
			
		||||
        for user_agent in (MSIE_9_USER_AGENT,
 | 
			
		||||
                           MSIE_8_USER_AGENT,
 | 
			
		||||
                           MSIE_7_USER_AGENT):
 | 
			
		||||
            req = self.rf.get('/', HTTP_ACCEPT='*/*', HTTP_USER_AGENT=user_agent)
 | 
			
		||||
            resp = self.MockResource(req)
 | 
			
		||||
            self.assertEqual(resp['Content-Type'], 'text/html')
 | 
			
		||||
    
 | 
			
		||||
    def test_other_ua_dont_munge_accept(self):
 | 
			
		||||
        """Send Non-MSIE user agent strings and ensure that we get a JSON response,
 | 
			
		||||
        if we set a */* Accept header.  (Other browsers will correctly set the Accept header)"""
 | 
			
		||||
        for user_agent in (FIREFOX_4_0_USER_AGENT,
 | 
			
		||||
                           CHROME_11_0_USER_AGENT,
 | 
			
		||||
                           SAFARI_5_0_USER_AGENT,
 | 
			
		||||
                           OPERA_11_0_MSIE_USER_AGENT,
 | 
			
		||||
                           OPERA_11_0_OPERA_USER_AGENT):
 | 
			
		||||
            req = self.rf.get('/', HTTP_ACCEPT='*/*', HTTP_USER_AGENT=user_agent)
 | 
			
		||||
            resp = self.MockResource(req)
 | 
			
		||||
            self.assertEqual(resp['Content-Type'], 'application/json')
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +0,0 @@
 | 
			
		|||
from django.db import models
 | 
			
		||||
 | 
			
		||||
# Create your models here.
 | 
			
		||||
| 
						 | 
				
			
			@ -1,23 +0,0 @@
 | 
			
		|||
"""
 | 
			
		||||
This file demonstrates two different styles of tests (one doctest and one
 | 
			
		||||
unittest). These will both pass when you run "manage.py test".
 | 
			
		||||
 | 
			
		||||
Replace these with more appropriate tests for your application.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
 | 
			
		||||
class SimpleTest(TestCase):
 | 
			
		||||
    def test_basic_addition(self):
 | 
			
		||||
        """
 | 
			
		||||
        Tests that 1 + 1 always equals 2.
 | 
			
		||||
        """
 | 
			
		||||
        self.failUnlessEqual(1 + 1, 2)
 | 
			
		||||
 | 
			
		||||
__test__ = {"doctest": """
 | 
			
		||||
Another way to test that 1 + 1 is equal to 2.
 | 
			
		||||
 | 
			
		||||
>>> 1 + 1 == 2
 | 
			
		||||
True
 | 
			
		||||
"""}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user