Django

Code

Changeset 6039

Show
Ignore:
Timestamp:
09/03/07 06:21:40 (1 year ago)
Author:
russellm
Message:

Fixed #4988 -- In the test client, Added tracking of the client and request that caused a response so that the assertRedirects check can use the correct client when following a redirect. Well spotted, alex@gc-web.de.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/test/client.py

    r6023 r6039  
    183183            raise self.exc_info[1], None, self.exc_info[2] 
    184184 
     185        # Save the client and request that stimulated the response 
     186        response.client = self 
     187        response.request = request 
     188 
    185189        # Add any rendered template detail to the response 
    186190        # If there was only one template rendered (the most likely case), 
  • django/trunk/django/test/testcases.py

    r6031 r6039  
    8181            "Response redirected to '%s', expected '%s'" % (url, expected_url)) 
    8282         
    83         redirect_response = self.client.get(path, QueryDict(query)) 
     83        # Get the redirection page, using the same client that was used 
     84        # to obtain the original response. 
     85        redirect_response = response.client.get(path, QueryDict(query)) 
    8486        self.assertEqual(redirect_response.status_code, target_status_code,  
    8587            "Couldn't retrieve redirection page '%s': response code was %d (expected %d)" %  
  • django/trunk/docs/testing.txt

    r6031 r6039  
    578578    Attribute        Description 
    579579    ===============  ========================================================== 
    580     ``status_code``  The HTTP status of the response, as an integer. See 
    581                      RFC2616_ for a full list of HTTP status codes
     580    ``client``       The test client that was used to make the request that 
     581                     resulted in the response
    582582 
    583583    ``content``      The body of the response, as a string. This is the final 
    584584                     page content as rendered by the view, or any error 
    585585                     message (such as the URL for a 302 redirect). 
     586 
     587    ``context``      The template ``Context`` instance that was used to render 
     588                     the template that produced the response content. 
     589 
     590                     If the rendered page used multiple templates, then 
     591                     ``context`` will be a list of ``Context`` 
     592                     objects, in the order in which they were rendered. 
     593 
     594    ``request``      The request data that stimulated the response. 
     595 
     596    ``status_code``  The HTTP status of the response, as an integer. See 
     597                     RFC2616_ for a full list of HTTP status codes. 
    586598 
    587599    ``template``     The ``Template`` instance that was used to render the 
     
    595607                     be a list of ``Template`` instances, in the order in 
    596608                     which they were rendered. 
    597  
    598     ``context``      The template ``Context`` instance that was used to render 
    599                      the template that produced the response content. 
    600  
    601                      As with ``template``, if the rendered page used multiple 
    602                      templates, then ``context`` will be a list of ``Context`` 
    603                      objects, in the order in which they were rendered. 
    604609    ===============  ========================================================== 
    605610 
     
    829834``assertRedirects(response, expected_url, status_code=302, target_status_code=200)`` 
    830835    Asserts that the response return a ``status_code`` redirect status, 
    831     it redirected to ``expected_url`` (including any GET data), and the subsequent  
     836    it redirected to ``expected_url`` (including any GET data), and the subsequent 
    832837    page was received with ``target_status_code``. 
    833838 
  • django/trunk/tests/modeltests/test_client/models.py

    r6031 r6039  
    235235         
    236236        # Log in 
    237         self.client.login(username='testclient', password='password') 
     237        login = self.client.login(username='testclient', password='password') 
     238        self.assertTrue(login, 'Could not log in') 
    238239 
    239240        # Request a page that requires a login 
  • django/trunk/tests/regressiontests/test_client_regress/models.py

    r6031 r6039  
    213213            self.assertEqual(str(e), "The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [u'Enter a valid e-mail address.'])") 
    214214 
    215 class AssertFileUploadTests(TestCase): 
     215class FileUploadTests(TestCase): 
    216216    def test_simple_upload(self): 
    217217        fd = open(os.path.join(os.path.dirname(__file__), "views.py")) 
     
    222222        response = self.client.post('/test_client_regress/file_upload/', post_data) 
    223223        self.assertEqual(response.status_code, 200) 
     224 
     225class LoginTests(TestCase): 
     226    fixtures = ['testdata'] 
     227 
     228    def test_login_different_client(self): 
     229        "Check that using a different test client doesn't violate authentication" 
     230 
     231        # Create a second client, and log in. 
     232        c = Client() 
     233        login = c.login(username='testclient', password='password') 
     234        self.assertTrue(login, 'Could not log in') 
     235 
     236        # Get a redirection page with the second client. 
     237        response = c.get("/test_client_regress/login_protected_redirect_view/") 
     238         
     239        # At this points, the self.client isn't logged in.  
     240        # Check that assertRedirects uses the original client, not the  
     241        # default client. 
     242        self.assertRedirects(response, "/test_client_regress/get_view/") 
  • django/trunk/tests/regressiontests/test_client_regress/urls.py

    r5876 r6039  
    55    (r'^no_template_view/$', views.no_template_view), 
    66    (r'^file_upload/$', views.file_upload_view), 
     7    (r'^get_view/$', views.get_view), 
     8    (r'^login_protected_redirect_view/$', views.login_protected_redirect_view) 
    79) 
  • django/trunk/tests/regressiontests/test_client_regress/views.py

    r5876 r6039  
     1from django.contrib.auth.decorators import login_required 
    12from django.core.mail import EmailMessage, SMTPConnection 
    2 from django.http import HttpResponse, HttpResponseServerError 
     3from django.http import HttpResponse, HttpResponseRedirect, HttpResponseServerError 
    34from django.shortcuts import render_to_response 
    45 
     
    1920        return HttpResponseServerError() 
    2021 
     22def get_view(request): 
     23    "A simple login protected view"     
     24    return HttpResponse("Hello world") 
     25get_view = login_required(get_view) 
     26 
     27def login_protected_redirect_view(request): 
     28    "A view that redirects all requests to the GET view" 
     29    return HttpResponseRedirect('/test_client_regress/get_view/') 
     30login_protected_redirect_view = login_required(login_protected_redirect_view)