Mercurial > public > sg101
view antispam/tests/test_utils.py @ 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 | 9e803323a0d0 |
children |
line wrap: on
line source
""" Tests for the antispam application. """ import datetime from django.test import TestCase from django.contrib.auth.models import User 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, 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_ACTIVE, STA_SPAMMER, STA_STRANGER, STA_SUSPENDED class AntispamUtilsCase(TestCase): def test_no_phrases(self): """ Tests that an empty spam phrase table works. """ cache.delete(SPAM_PHRASE_KEY) self.assertFalse(contains_spam("Here is some random text.")) def test_phrases(self): """ Simple test of some phrases. """ SpamPhrase.objects.create(phrase="grytner") SpamPhrase.objects.create(phrase="allday.ru") SpamPhrase.objects.create(phrase="stefa.pl") 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): """ Test the deactivate_spammer() function. """ user = User.objects.create_user('spammer_guy', '', 'password') user.save() profile = user.profile profile.location = 'Spamville' profile.country = 'US' profile.birthday = datetime.date.today() profile.occupation = 'Spammer' profile.interests = 'Spamming websites' profile.profile_text = 'I spam a lot.' profile.signature = 'I spammed you!' profile.save() now=datetime.datetime.now() # create a poll item to comment on poll = Poll(start_date=now, end_date=now, is_enabled=True, question='?') poll.save() comment = Comment( content_type=ContentType.objects.get_for_model(poll), object_id=poll.pk, user=user, comment='Spam Spam Spam', ip_address='127.0.0.1', is_public=True, is_removed=False) comment.save() website = WebsiteProfile(user=user, name='spam', url='spam') website.save() shout = Shout(user=user, shout_date=now, shout='spam') shout.save() deactivate_spammer(user) profile = user.profile self.assertFalse(profile.location) self.assertFalse(profile.country) self.assertIsNone(profile.birthday) self.assertFalse(profile.occupation) self.assertFalse(profile.interests) self.assertFalse(profile.profile_text) self.assertFalse(profile.profile_html) self.assertFalse(profile.signature) self.assertFalse(profile.signature_html) self.assertEqual(profile.status, STA_SPAMMER) status_date = datetime.date(year=profile.status_date.year, month=profile.status_date.month, day=profile.status_date.day) self.assertEqual(status_date, datetime.date.today()) 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), ])