示例#1
0
 def setUp(self):
     self.mixin = CacheKeyMixin()
     self.mixin.model = Manufacturer()
     self.mixin.db = 'db'
示例#2
0
 def setUp(self):
     self.mixin = CacheKeyMixin()
     self.mixin.model = Manufacturer()
     self.mixin.db = 'db'
示例#3
0
class CacheKeyMixinTests(TestCase):
    """
    Tests for django_cache_manager.mixins.CacheKeyMixin
    """
    def setUp(self):
        self.mixin = CacheKeyMixin()
        self.mixin.model = Manufacturer()
        self.mixin.db = 'db'

    def test_consistent_key_generation(self, mock_sql, mock_model_cache):
        """
        Mixin generates identical keys for repeated calls when sql and model are the same.
        """
        mock_sql.return_value = 'sql'
        key1 = self.mixin.generate_key()
        key2 = self.mixin.generate_key()
        self.assertEquals(key1, key2)

    def test_key_generation_with_non_ascii_unicode(self, mock_sql,
                                                   mock_model_cache):
        """
        When the query_key is unicode containing non-ascii characters, hashlib.md5 should not error out
        """
        mock_sql.return_value = u'\xf1'

        try:
            self.mixin.generate_key()
        except UnicodeEncodeError:
            self.fail(
                "CacheKeyMixin.gernerate_key() raised a UnicodeEncodeError!")

    @patch('django_cache_manager.mixins.uuid')
    def test_new_key_generation(self, mock_uuid, mock_sql, mock_model_cache):
        """
        Mixin broadcasts key for the model when it is newly created
        """
        mock_model_cache.retrieve_model_cache_info.return_value = None
        mock_uuid4 = Mock(hex='unique_id')
        mock_uuid.uuid4.return_value = mock_uuid4
        self.mixin.generate_key()
        model_cache_info = ModelCacheInfo(table_name=u'tests_manufacturer',
                                          table_key='unique_id')
        mock_model_cache.share_model_cache_info.assert_called_once_with(
            model_cache_info)

    def test_key_components(self, mock_sql, mock_model_cache):
        """
        Ensure key created by mixin is a hash of model_key, sql query and database name
        """
        mock_sql.return_value = 'sql'
        mock_model_cache.retrieve_model_cache_info.return_value = ModelCacheInfo(
            table_name=u'tests_manufacturer', table_key='unique_id')
        expected_key_value = hashlib.md5(
            u'unique_idsqldb'.encode('utf-8')).hexdigest()
        self.assertEquals(expected_key_value, self.mixin.generate_key())

    def test_get_or_create_model_key(self, mock_sql, mock_model_cache):
        """
        get_or_create_model_key returns existing key when one exists
        """
        mock_model_cache.retrieve_model_cache_info.return_value = ModelCacheInfo(
            table_name=u'tests_manufacturer', table_key='unique_id')
        key, created = self.mixin.get_or_create_model_key()
        self.assertFalse(created)
        self.assertEquals(key, 'unique_id')

    @patch('django_cache_manager.mixins.uuid')
    def test_get_or_create_model_key_creates(self, mock_uuid, mock_sql,
                                             mock_model_cache):
        """
        get_or_create_model_key creates a new key for model when it does not exist
        """
        mock_model_cache.retrieve_model_cache_info.return_value = None
        mock_uuid4 = Mock(hex='uuid')
        mock_uuid.uuid4.return_value = mock_uuid4
        key, created = self.mixin.get_or_create_model_key()
        self.assertEquals(True, created)
        self.assertEquals(key, 'uuid')
示例#4
0
class CacheKeyMixinTests(TestCase):
    """
    Tests for django_cache_manager.mixins.CacheKeyMixin
    """

    def setUp(self):
        self.mixin = CacheKeyMixin()
        self.mixin.model = Manufacturer()
        self.mixin.db = 'db'

    def test_consistent_key_generation(self, mock_sql, mock_model_cache):
        """
        Mixin generates identical keys for repeated calls when sql and model are the same.
        """
        mock_sql.return_value = 'sql'
        key1 = self.mixin.generate_key()
        key2 = self.mixin.generate_key()
        self.assertEquals(key1, key2)

    def test_key_generation_with_non_ascii_unicode(self, mock_sql, mock_model_cache):
        """
        When the query_key is unicode containing non-ascii characters, hashlib.md5 should not error out
        """
        mock_sql.return_value = u'\xf1'

        try:
            self.mixin.generate_key()
        except UnicodeEncodeError:
            self.fail("CacheKeyMixin.gernerate_key() raised a UnicodeEncodeError!")

    @patch('django_cache_manager.mixins.uuid')
    def test_new_key_generation(self, mock_uuid, mock_sql, mock_model_cache):
        """
        Mixin broadcasts key for the model when it is newly created
        """
        mock_model_cache.retrieve_model_cache_info.return_value = None
        mock_uuid4 = Mock(hex='unique_id')
        mock_uuid.uuid4.return_value = mock_uuid4
        self.mixin.generate_key()
        model_cache_info = ModelCacheInfo(table_name=u'tests_manufacturer', table_key='unique_id')
        mock_model_cache.share_model_cache_info.assert_called_once_with(model_cache_info)

    def test_key_components(self, mock_sql, mock_model_cache):
        """
        Ensure key created by mixin is a hash of model_key, sql query and database name
        """
        mock_sql.return_value = 'sql'
        mock_model_cache.retrieve_model_cache_info.return_value = ModelCacheInfo(table_name=u'tests_manufacturer', table_key='unique_id')
        expected_key_value = hashlib.md5(u'unique_idsqldb'.encode('utf-8')).hexdigest()
        self.assertEquals(expected_key_value, self.mixin.generate_key())

    def test_get_or_create_model_key(self, mock_sql, mock_model_cache):
        """
        get_or_create_model_key returns existing key when one exists
        """
        mock_model_cache.retrieve_model_cache_info.return_value = ModelCacheInfo(table_name=u'tests_manufacturer', table_key='unique_id')
        key, created = self.mixin.get_or_create_model_key()
        self.assertFalse(created)
        self.assertEquals(key, 'unique_id')

    @patch('django_cache_manager.mixins.uuid')
    def test_get_or_create_model_key_creates(self, mock_uuid, mock_sql, mock_model_cache):
        """
        get_or_create_model_key creates a new key for model when it does not exist
        """
        mock_model_cache.retrieve_model_cache_info.return_value = None
        mock_uuid4 = Mock(hex='uuid')
        mock_uuid.uuid4.return_value = mock_uuid4
        key, created = self.mixin.get_or_create_model_key()
        self.assertEquals(True, created)
        self.assertEquals(key, 'uuid')