# HG changeset patch # User Brian Neal # Date 1429666376 18000 # Node ID 8b48ec450497c5f5680506cb0e621b5244e4fb6c # Parent 7a795ccd647930ef915870647178e251678c639d Add tests for forums signal handlers. diff -r 7a795ccd6479 -r 8b48ec450497 forums/tests/test_receivers.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/forums/tests/test_receivers.py Tue Apr 21 20:32:56 2015 -0500 @@ -0,0 +1,63 @@ +"""Tests for the forum app's signal handlers.""" + +from django.contrib.auth.models import User +from django.test import TestCase + +from mock import patch + +import custom_search.receivers + +from forums.models import Forum +from forums.models import Post +from forums.models import Topic + + +class ReceiverTestCase(TestCase): + + fixtures = ['forums.json'] + + def setUp(self): + self.user = User.objects.create_user('user', 'user@example.com', 'pw') + + # Don't let our custom search signal handler class catch any of the + # signals we are throwing here. + custom_search.receivers.signal_processor.teardown() + + def tearDown(self): + custom_search.receivers.signal_processor.setup() + + @patch('forums.latest.notify_topic_delete') + def test_signal_handlers(self, mock_latest): + forum = Forum.objects.get(pk=2) + topic = Topic(forum=forum, + name='Test Topic', + user=self.user) + topic.save() + forum = Forum.objects.get(pk=2) + self.assertEqual(1, forum.topic_count) + + post = Post(topic=topic, user=self.user, body='test') + post.save() + + topic = Topic.objects.get(pk=topic.pk) + self.assertEqual(topic.post_count, 1) + forum = Forum.objects.get(pk=2) + self.assertEqual(forum.post_count, 1) + + # To prevent cascading deletes + topic.last_post_pre_delete() + topic.save() + forum.last_post_pre_delete() + forum.save() + + post.delete() + topic = Topic.objects.get(pk=topic.pk) + self.assertEqual(topic.post_count, 0) + forum = Forum.objects.get(pk=2) + self.assertEqual(forum.post_count, 0) + + topic.delete() + forum = Forum.objects.get(pk=2) + self.assertEqual(0, forum.topic_count) + + mock_latest.assert_called_once_with(topic)