Skip to content

Commit

Permalink
Add cloudflare purging to homepage
Browse files Browse the repository at this point in the history
  • Loading branch information
harrislapiroff committed Apr 25, 2018
1 parent bf510a1 commit c121520
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 0 deletions.
1 change: 1 addition & 0 deletions home/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
default_app_config = 'home.apps.HomeConfig'
8 changes: 8 additions & 0 deletions home/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from django.apps import AppConfig


class HomeConfig(AppConfig):
name = 'home'

def ready(self):
import home.signals # noqa: F401
21 changes: 21 additions & 0 deletions home/signals.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from django.db.models.signals import post_save, post_delete

from wagtail.contrib.wagtailfrontendcache.utils import purge_page_from_cache

from home.models import HomePage
from github.models import Release
from blog.models import BlogPage
from directory.models import DirectoryEntry


def purge_homepage_from_frontend_cache(sender, **kwargs):
for home_page in HomePage.objects.live():
purge_page_from_cache(home_page)


post_save.connect(purge_homepage_from_frontend_cache, sender=Release)
post_save.connect(purge_homepage_from_frontend_cache, sender=BlogPage)
post_save.connect(purge_homepage_from_frontend_cache, sender=DirectoryEntry)
post_delete.connect(purge_homepage_from_frontend_cache, sender=Release)
post_delete.connect(purge_homepage_from_frontend_cache, sender=BlogPage)
post_delete.connect(purge_homepage_from_frontend_cache, sender=DirectoryEntry)
36 changes: 36 additions & 0 deletions home/tests/test_frontendcache_purging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import datetime

from unittest.mock import patch, call

from django.test import TestCase

from home.tests.factories import HomePageFactory
from github.models import Release
from blog.tests.factories import BlogPageFactory
from directory.tests.factories import DirectoryEntryFactory


@patch('home.signals.purge_page_from_cache')
class FrontendCacheTestCase(TestCase):
def setUp(self):
self.home_page = HomePageFactory()

def test_cache_purged_for_release(self, purge_mock):
"Homepage cache should be purged when a new release is added"
Release.objects.create(date=datetime.datetime(2016, 1, 1, 0, 0, 0))
purge_mock.assert_called_once_with(self.home_page)

def test_cache_purged_for_blog_post(self, purge_mock):
"Homepage cache should be purged when a new blog post is added"
BlogPageFactory.create()
purge_mock.assert_called_once_with(self.home_page)

def test_cache_purged_for_directory_entry(self, purge_mock):
"Homepage cache should be purged when a new directory entry is added"
DirectoryEntryFactory.create()
# DirectoryEntry saving logic causes it to be saved twice, triggering
# the purge twice (this is not necessarily desireable, but it is
# mostly harmless)
purge_mock.assert_has_calls([
call(self.home_page), call(self.home_page)
])

0 comments on commit c121520

Please sign in to comment.