Ticket #10899: 10899_at_r16086.diff
File 10899_at_r16086.diff, 6.0 KB (added by , 13 years ago) |
---|
-
django/test/client.py
diff --git a/django/test/client.py b/django/test/client.py index 5cbc0ca..ea4d9ff 100644
a b class Client(RequestFactory): 345 345 super(Client, self).__init__(**defaults) 346 346 self.handler = ClientHandler(enforce_csrf_checks) 347 347 self.exc_info = None 348 self._session_store = None 348 349 349 350 def store_exc_info(self, **kwargs): 350 351 """ … … class Client(RequestFactory): 356 357 """ 357 358 Obtains the current session variables. 358 359 """ 360 if self._session_store: 361 return self._session_store 362 359 363 if 'django.contrib.sessions' in settings.INSTALLED_APPS: 360 364 engine = import_module(settings.SESSION_ENGINE) 361 cookie = self.cookies.get(settings.SESSION_COOKIE_NAME , None)365 cookie = self.cookies.get(settings.SESSION_COOKIE_NAME) 362 366 if cookie: 363 return engine.SessionStore(cookie.value) 364 return {} 367 session_store = engine.SessionStore(cookie.value) 368 else: 369 session_store = engine.SessionStore() 370 session_store.save() 371 self.cookies[settings.SESSION_COOKIE_NAME] = \ 372 session_store.session_key 373 self._session_store = session_store 374 return session_store 375 else: 376 return {} 365 377 session = property(_session) 366 378 367 368 379 def request(self, **request): 369 380 """ 370 381 The master request method. Composes the environment dictionary … … class Client(RequestFactory): 374 385 """ 375 386 environ = self._base_environ(**request) 376 387 388 if hasattr(self.session, "save"): 389 # Save session modifications and update the session cookie since 390 # the session key may change over login or logout. Also, force 391 # the session to be reloaded on next access. 392 self.session.save() 393 self.cookies[settings.SESSION_COOKIE_NAME] = \ 394 self.session.session_key 395 self._session_store = None 396 377 397 # Curry a data dictionary into an instance of the template renderer 378 398 # callback function. 379 399 data = {} … … class Client(RequestFactory): 505 525 user = authenticate(**credentials) 506 526 if user and user.is_active \ 507 527 and 'django.contrib.sessions' in settings.INSTALLED_APPS: 508 engine = import_module(settings.SESSION_ENGINE)509 528 510 529 # Create a fake request to store login details. 511 530 request = HttpRequest() 512 if self.session: 513 request.session = self.session 514 else: 515 request.session = engine.SessionStore() 531 request.session = self.session 516 532 login(request, user) 517 533 518 534 # Save the session values. … … class Client(RequestFactory): 545 561 if session_cookie: 546 562 session.delete(session_key=session_cookie.value) 547 563 self.cookies = SimpleCookie() 564 self._session_store = None 548 565 549 566 def _handle_redirects(self, response, **extra): 550 567 "Follows any redirects by requesting responses from the server using GET." -
docs/topics/testing.txt
diff --git a/docs/topics/testing.txt b/docs/topics/testing.txt index fb9f6e5..005a336 100644
a b can access these properties as part of a test condition. 1009 1009 session['somekey'] = 'test' 1010 1010 session.save() 1011 1011 1012 .. versionadded:: Development 1013 1014 Similar to normal Django sessions, you can manipulate sessions directly. 1015 The modified values will be saved on subsequent requests. 1016 1017 def test_something(self): 1018 self.client.session['somekey'] = value 1019 self.client.session['anotherkey'] = value 1020 1012 1021 .. _Cookie module documentation: http://docs.python.org/library/cookie.html 1013 1022 1014 1023 Example -
tests/regressiontests/test_client_regress/models.py
diff --git a/tests/regressiontests/test_client_regress/models.py b/tests/regressiontests/test_client_regress/models.py index 6757695..40848a1 100644
a b class SessionTests(TestCase): 691 691 self.assertEqual(response.status_code, 200) 692 692 self.assertEqual(response.content, 'YES') 693 693 694 def test_session_manipulation(self): 695 # Check that the session can be edited as documented before #10899. 696 session = self.client.session 697 session["session_var"] = "foo" 698 session.save() 699 700 response = self.client.get('/test_client_regress/check_session/') 701 self.assertEqual(response.status_code, 200) 702 self.assertEqual(response.content, 'foo') 703 704 def test_direct_session_manipulation(self): 705 # Add a value to the session 706 self.client.session['session_var'] = 'bar' 707 self.assertEqual(self.client.session['session_var'], 'bar') 708 709 # Check that the session has been modified 710 response = self.client.get('/test_client_regress/check_session/') 711 self.assertEqual(response.status_code, 200) 712 self.assertEqual(response.content, 'bar') 713 714 # Check that the session variable persists over login 715 # when cycle_key() is called 716 self.client.login(username='testclient', password='password') 717 self.assertEqual(self.client.session['session_var'], 'bar') 718 719 response = self.client.get('/test_client_regress/check_session/') 720 self.assertEqual(response.status_code, 200) 721 self.assertEqual(response.content, 'bar') 722 723 # Check that new session is started after logout 724 self.client.logout() 725 self.assertEqual(self.client.session.get('session_var'), None) 726 694 727 def test_logout(self): 695 728 """Logout should work whether the user is logged in or not (#9978).""" 696 729 self.client.logout() … … class SessionTests(TestCase): 699 732 self.client.logout() 700 733 self.client.logout() 701 734 735 702 736 class RequestMethodTests(TestCase): 703 737 def test_get(self): 704 738 "Request a view via request method GET"