test_session.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.contrib.messages import constants
  2. from django.contrib.messages.tests.base import BaseTests
  3. from django.contrib.messages.storage.base import Message
  4. from django.contrib.messages.storage.session import SessionStorage
  5. from django.utils.safestring import SafeData, mark_safe
  6. from django.test import TestCase
  7. def set_session_data(storage, messages):
  8. """
  9. Sets the messages into the backend request's session and remove the
  10. backend's loaded data cache.
  11. """
  12. storage.request.session[storage.session_key] = storage.serialize_messages(messages)
  13. if hasattr(storage, '_loaded_data'):
  14. del storage._loaded_data
  15. def stored_session_messages_count(storage):
  16. data = storage.deserialize_messages(storage.request.session.get(storage.session_key, []))
  17. return len(data)
  18. class SessionTest(BaseTests, TestCase):
  19. storage_class = SessionStorage
  20. def get_request(self):
  21. self.session = {}
  22. request = super(SessionTest, self).get_request()
  23. request.session = self.session
  24. return request
  25. def stored_messages_count(self, storage, response):
  26. return stored_session_messages_count(storage)
  27. def test_get(self):
  28. storage = self.storage_class(self.get_request())
  29. # Set initial data.
  30. example_messages = ['test', 'me']
  31. set_session_data(storage, example_messages)
  32. # Test that the message actually contains what we expect.
  33. self.assertEqual(list(storage), example_messages)
  34. def test_safedata(self):
  35. """
  36. Tests that a message containing SafeData is keeping its safe status when
  37. retrieved from the message storage.
  38. """
  39. storage = self.get_storage()
  40. message = Message(constants.DEBUG, mark_safe("<b>Hello Django!</b>"))
  41. set_session_data(storage, [message])
  42. self.assertIsInstance(list(storage)[0].message, SafeData)