test_session.py 1.83 KB
Newer Older
1 2
from django.contrib.messages import constants
from django.contrib.messages.storage.base import Message
3
from django.contrib.messages.storage.session import SessionStorage
4
from django.test import TestCase
5
from django.utils.safestring import SafeData, mark_safe
6

7 8
from .base import BaseTests

9 10 11 12 13 14

def set_session_data(storage, messages):
    """
    Sets the messages into the backend request's session and remove the
    backend's loaded data cache.
    """
15
    storage.request.session[storage.session_key] = storage.serialize_messages(messages)
16 17 18 19 20
    if hasattr(storage, '_loaded_data'):
        del storage._loaded_data


def stored_session_messages_count(storage):
21
    data = storage.deserialize_messages(storage.request.session.get(storage.session_key, []))
22 23 24
    return len(data)


25
class SessionTest(BaseTests, TestCase):
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
    storage_class = SessionStorage

    def get_request(self):
        self.session = {}
        request = super(SessionTest, self).get_request()
        request.session = self.session
        return request

    def stored_messages_count(self, storage, response):
        return stored_session_messages_count(storage)

    def test_get(self):
        storage = self.storage_class(self.get_request())
        # Set initial data.
        example_messages = ['test', 'me']
        set_session_data(storage, example_messages)
        # Test that the message actually contains what we expect.
        self.assertEqual(list(storage), example_messages)
44 45 46 47 48 49 50 51 52 53 54

    def test_safedata(self):
        """
        Tests that a message containing SafeData is keeping its safe status when
        retrieved from the message storage.
        """
        storage = self.get_storage()

        message = Message(constants.DEBUG, mark_safe("<b>Hello Django!</b>"))
        set_session_data(storage, [message])
        self.assertIsInstance(list(storage)[0].message, SafeData)