Skip to content

Commit

Permalink
Fixed error in signal management
Browse files Browse the repository at this point in the history
  • Loading branch information
yakky committed Jan 24, 2017
1 parent 8aec1eb commit f59ef54
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 5 deletions.
6 changes: 4 additions & 2 deletions knocker/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,21 @@ def notify_items(**kwargs):
for lang in langs:
with override(lang):
instance.send_knock(created)
return True
except AttributeError: # pragma: no cover
pass
return False


def active_knocks(obj):
"""
Checks whether knocks are enabled for the model given as argument
:param obj: model instance
:return True if knocks are paused
:return True if knocks are active
"""
if not hasattr(_thread_locals, 'knock_enabled'):
return False
return True
return _thread_locals.knock_enabled.get(obj.__class__, True)


Expand Down
35 changes: 32 additions & 3 deletions tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from mock import patch
from parler.utils.context import smart_override

from knocker.signals import pause_knocks, active_knocks
from .base import BaseKnocker
from .example_app.models import Post, MultiLanguagePost, NoKnockPost

Expand All @@ -14,16 +15,16 @@ class KnockerTest(BaseKnocker):

def test_model_attributes(self):
posts = []
posts.append(Post.objects.create(
posts.append(MultiLanguagePost.objects.create(
title='first post',
slug='first-post',
))
posts.append(Post.objects.create(
posts.append(MultiLanguagePost.objects.create(
title='second post',
slug='second-post',
))

for language in get_language():
for language in [get_language()]:
with override(language):
for post in posts:
knock_create = post.as_knock(True)
Expand Down Expand Up @@ -96,3 +97,31 @@ def test_no_knock(self, handler):
slug='second-post',
))
self.assertEqual(handler.call_count, 2)

@patch('knocker.mixins.notify_items')
def test_signal(self, handler):
post = Post.objects.create(
title='signal post',
slug='signal-post',
)
handler.assert_called_once()
self.assertTrue(handler.return_value)
handler.reset_mock()

post.title = 'mod title'
post.save()
handler.assert_called_once()
self.assertTrue(handler.return_value)
handler.reset_mock()

with pause_knocks(post):
post.title = 'pause title'
post.save()
self.assertFalse(active_knocks(post))
handler.assert_not_called()

post.title = 'mod title'
post.save()
handler.assert_called_once()
self.assertTrue(handler.return_value)
handler.reset_mock()

0 comments on commit f59ef54

Please sign in to comment.