Mercurial > public > sg101
changeset 1214:9a011e2de2f6 modernize tip
Add more coverage to antispam utils unit tests.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Mon, 10 Feb 2025 19:34:14 -0600 |
parents | 5e898f91fe36 |
children | |
files | antispam/tests/test_utils.py |
diffstat | 1 files changed, 77 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/antispam/tests/test_utils.py Sun Feb 09 14:31:35 2025 -0600 +++ b/antispam/tests/test_utils.py Mon Feb 10 19:34:14 2025 -0600 @@ -9,18 +9,19 @@ from django.contrib.contenttypes.models import ContentType from django.core.cache import cache +from mock import call, patch, Mock + from antispam import SPAM_PHRASE_KEY from antispam.models import SpamPhrase -from antispam.utils import contains_spam, deactivate_spammer - +from antispam.utils import contains_spam, deactivate_spammer, spam_check from comments.models import Comment from polls.models import Poll from elsewhere.models import WebsiteProfile from shoutbox.models import Shout -from bio.models import STA_SPAMMER +from bio.models import STA_ACTIVE, STA_SPAMMER, STA_STRANGER, STA_SUSPENDED -class AntispamCase(TestCase): +class AntispamUtilsCase(TestCase): def test_no_phrases(self): """ @@ -39,13 +40,13 @@ SpamPhrase.objects.create(phrase="allday.ru") SpamPhrase.objects.create(phrase="stefa.pl") - self.assert_(contains_spam("grytner")) - self.assert_(contains_spam("11grytner")) - self.assert_(contains_spam("11grytner>")) - self.assert_(contains_spam("1djkl jsd stefa.pl")) - self.assert_(contains_spam("1djkl jsd <stefa.pl---sd8")) - self.assert_(contains_spam("1dsdjallday.rukl jsd <stefa.pl---sd8")) - self.assert_(contains_spam(" 1djallday.rukl")) + self.assertTrue(contains_spam("grytner")) + self.assertTrue(contains_spam("11grytner")) + self.assertTrue(contains_spam("11grytner>")) + self.assertTrue(contains_spam("1djkl jsd stefa.pl")) + self.assertTrue(contains_spam("1djkl jsd <stefa.pl---sd8")) + self.assertTrue(contains_spam("1dsdjallday.rukl jsd <stefa.pl---sd8")) + self.assertTrue(contains_spam(" 1djallday.rukl")) self.assertFalse(contains_spam("this one is spam free.")) def test_deactivate_spammer(self): @@ -113,3 +114,68 @@ self.assertEqual(Comment.objects.filter(user=user).count(), 0) self.assertEqual(WebsiteProfile.objects.filter(user=user).count(), 0) self.assertEqual(Shout.objects.filter(user=user).count(), 0) + + +class AntispamSpamCheckTestCase(TestCase): + def setUp(self): + user = User.objects.create_user('spammer_guy', '', 'password') + user.save() + SpamPhrase.objects.create(phrase="grytner") + + @patch('antispam.utils.email_admins') + def test_not_a_stranger(self, email_admins_mock): + user = User.objects.get(username='spammer_guy') + user.profile.status = STA_ACTIVE + user.profile.save(content_update=False) + + request = Mock() + request.user = user + result = spam_check(request, 'grytner') + + self.assertFalse(result) + user = User.objects.get(username='spammer_guy') + self.assertTrue(user.is_active) + self.assertEqual(user.profile.status, STA_ACTIVE) + self.assertEqual(email_admins_mock.mock_calls, []) + + @patch('antispam.utils.email_admins') + def test_stranger_no_spam(self, email_admins_mock): + user = User.objects.get(username='spammer_guy') + user.profile.status = STA_ACTIVE + user.profile.save(content_update=False) + + request = Mock() + request.user = user + result = spam_check(request, 'not spam') + + self.assertFalse(result) + user = User.objects.get(username='spammer_guy') + self.assertTrue(user.is_active) + self.assertEqual(user.profile.status, STA_ACTIVE) + self.assertEqual(email_admins_mock.mock_calls, []) + + @patch('antispam.utils.email_admins') + def test_stranger_with_spam(self, email_admins_mock): + user = User.objects.get(username='spammer_guy') + user.profile.status = STA_STRANGER + user.profile.save(content_update=False) + + request = Mock() + request.user = user + request.path = '/some/path' + request.META = {'REMOTE_ADDR': '127.0.0.1'} + result = spam_check(request, 'grytner') + + self.assertTrue(result) + user = User.objects.get(username='spammer_guy') + self.assertFalse(user.is_active) + self.assertEqual(user.profile.status, STA_SUSPENDED) + + expected_msg = ('SPAM FILTER TRIPPED by spammer_guy\n' + 'PATH: /some/path\n' + 'IP: 127.0.0.1\n' + 'Message:\n' + 'grytner\n') + self.assertEqual(email_admins_mock.mock_calls, [ + call('SPAM FILTER TRIPPED BY spammer_guy', expected_msg), + ])