Skip to content

Commit

Permalink
Add test for cache cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
yakky committed Jun 29, 2015
1 parent 6dd67e9 commit c1b6b59
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 11 deletions.
12 changes: 4 additions & 8 deletions djangocms_page_tags/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,28 +39,24 @@ class Meta:
# Cache cleanup when deleting pages / editing page extensions
@receiver(pre_delete, sender=Page)
def cleanup_page(sender, instance, **kwargs):
key = get_cache_key(None, instance, '',
instance.site_id, False)
key = get_cache_key(None, instance, '', instance.site_id, False)
cache.delete(key)


@receiver(pre_delete, sender=Title)
def cleanup_title(sender, instance, **kwargs):
key = get_cache_key(None, instance.page, instance.language,
instance.page.site_id, True)
key = get_cache_key(None, instance.page, instance.language, instance.page.site_id, True)
cache.delete(key)


@receiver(post_save, sender=PageTags)
def cleanup_pagetags(sender, instance, **kwargs):
key = get_cache_key(None, instance.extended_object, '',
instance.extended_object.site_id, False)
key = get_cache_key(None, instance.extended_object, '', instance.extended_object.site_id, False)
cache.delete(key)


@receiver(post_save, sender=TitleTags)
def cleanup_titletags(sender, instance, **kwargs):
key = get_cache_key(None, instance.extended_object.page,
instance.extended_object.language,
key = get_cache_key(None, instance.extended_object.page, instance.extended_object.language,
instance.extended_object.page.site_id, True)
cache.delete(key)
2 changes: 1 addition & 1 deletion djangocms_page_tags/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ def get_page_tags_from_request(request, page_lookup, lang, site, title=False):
tags_list = get_title_tags(page, lang)
else:
tags_list = get_page_tags(page)
cache.set(cache_key, tags_list, get_cms_setting('CACHE_DURATIONS')['content'])
cache.set(cache_key, tags_list, timeout=get_cms_setting('CACHE_DURATIONS')['content'])
if not tags_list:
tags_list = ()
return tags_list
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
universal = 1

[flake8]
max-line-length = 100
max-line-length = 99
ignore = E501
exclude = tests/*,djangocms_page_tags/migrations/*
37 changes: 36 additions & 1 deletion tests/test_general.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from django.conf import settings
from django.core.cache import cache
from django.template.defaultfilters import slugify
from taggit.models import Tag
Expand All @@ -7,7 +8,7 @@
from djangocms_page_tags.utils import (page_has_tag, get_page_tags,
title_has_tag, get_title_tags,
get_page_tags_from_request,
get_title_tags_from_request)
get_title_tags_from_request, get_cache_key)

from . import BaseTest

Expand Down Expand Up @@ -105,3 +106,37 @@ def test_tags_request_title(self):
request = self.get_request(page, 'en')
tags_list = get_title_tags_from_request(request, page.get_public_object().pk, 'en', page.site_id)
self.assertEqual(set(self.tag_strings), set([tag.name for tag in tags_list]))

def test_cache_cleanup(self):
"""
Tests the correct retrieval of tags for a title from request
"""
page, page_2 = self.get_pages()

# Assign tags to title
title_tags = models.TitleTags.objects.create(extended_object=page.get_title_obj('en'))
title_tags.tags.add(*self.tag_strings)
page_tags = models.PageTags.objects.create(extended_object=page)
page_tags.tags.add(*self.tag_strings)
for lang in self.languages:
page.publish(lang)

# Reload page from request and extract tags from it
request = self.get_request(page, 'en')
title_tags_list = get_title_tags_from_request(request, page.get_public_object().pk, 'en', page.site_id)
page_tags_list = get_page_tags_from_request(request, page.get_public_object().pk, 'en', page.site_id)

title_key = get_cache_key(None, page.get_public_object(), 'en', page.get_public_object().site_id, True)
page_key = get_cache_key(None, page.get_public_object(), '', page.get_public_object().site_id, False)

title_cache = cache.get(title_key)
page_cache = cache.get(page_key)

self.assertEqual(set(title_tags_list), set(title_cache))
self.assertEqual(set(page_tags_list), set(page_cache))

page.get_public_object().get_title_obj('en').delete()
self.assertIsNone(cache.get(title_key))

page.get_public_object().delete()
self.assertIsNone(cache.get(page_key))

0 comments on commit c1b6b59

Please sign in to comment.