# HG changeset patch # User Brian Neal # Date 1429235359 18000 # Node ID 9d6c2ed2f348bcfd43e63ca76af22073b0b65617 # Parent 0aa9aeaa98a6e345b4c29aa874555a0a9f03c1e2 Add unit test for antispam signal handlers. diff -r 0aa9aeaa98a6 -r 9d6c2ed2f348 antispam/receivers.py --- a/antispam/receivers.py Thu Apr 16 19:35:08 2015 -0500 +++ b/antispam/receivers.py Thu Apr 16 20:49:19 2015 -0500 @@ -24,6 +24,7 @@ if user: logger.info('User logout signal: %s', user.username) + def login_failed_callback(sender, credentials, **kwargs): """Signal callback for a login failure event.""" logger.error('User login failed signal from %s: %s', sender, diff -r 0aa9aeaa98a6 -r 9d6c2ed2f348 antispam/tests/test_receivers.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/antispam/tests/test_receivers.py Thu Apr 16 20:49:19 2015 -0500 @@ -0,0 +1,35 @@ +"""Tests for the antispam signal handlers.""" +import logging + +from django.contrib.auth.models import User +from django.test import Client +from django.test import TestCase + +from testfixtures import log_capture + + +class AntispamSignalRcvrTestCase(TestCase): + + def setUp(self): + self.user = User.objects.create_user('steve', 'steve@example.com', 'pwd') + self.client = Client() + + # Temporarily enable logging + self.old_disable = logging.getLogger().manager.disable + logging.disable(logging.NOTSET) + + def tearDown(self): + logging.disable(self.old_disable) + + @log_capture('auth') + def test_login_logout_callback(self, lc): + self.assertTrue(self.client.login(username='steve', password='pwd')) + self.client.logout() + lc.check(('auth', 'INFO', 'User login signal: steve'), + ('auth', 'INFO', 'User logout signal: steve')) + + @log_capture('auth') + def test_login_failed_callback(self, lc): + self.assertFalse(self.client.login(username='steve', password='xxx')) + lc.check(('auth', 'ERROR', + 'User login failed signal from django.contrib.auth: steve'))