bgneal@472: """ bgneal@472: Tests for the antispam application. bgneal@625: bgneal@472: """ bgneal@625: import datetime bgneal@625: bgneal@472: from django.test import TestCase bgneal@625: from django.contrib.auth.models import User bgneal@625: from django.contrib.contenttypes.models import ContentType bgneal@472: from django.core.cache import cache bgneal@472: bgneal@472: from antispam import SPAM_PHRASE_KEY bgneal@472: from antispam.models import SpamPhrase bgneal@625: from antispam.utils import contains_spam, deactivate_spammer bgneal@625: bgneal@625: from comments.models import Comment bgneal@625: from polls.models import Poll bgneal@625: from elsewhere.models import WebsiteProfile bgneal@625: from shoutbox.models import Shout bgneal@625: from bio.models import STA_SPAMMER bgneal@472: bgneal@472: bgneal@472: class AntispamCase(TestCase): bgneal@472: bgneal@472: def test_no_phrases(self): bgneal@472: """ bgneal@472: Tests that an empty spam phrase table works. bgneal@625: bgneal@472: """ bgneal@472: cache.delete(SPAM_PHRASE_KEY) bgneal@472: self.assertFalse(contains_spam("Here is some random text.")) bgneal@472: bgneal@472: def test_phrases(self): bgneal@472: """ bgneal@472: Simple test of some phrases. bgneal@625: bgneal@472: """ bgneal@472: SpamPhrase.objects.create(phrase="grytner") bgneal@472: SpamPhrase.objects.create(phrase="allday.ru") bgneal@472: SpamPhrase.objects.create(phrase="stefa.pl") bgneal@472: bgneal@472: self.assert_(contains_spam("grytner")) bgneal@472: self.assert_(contains_spam("11grytner")) bgneal@472: self.assert_(contains_spam("11grytner>")) bgneal@472: self.assert_(contains_spam("1djkl jsd stefa.pl")) bgneal@472: self.assert_(contains_spam("1djkl jsd <stefa.pl---sd8")) bgneal@472: self.assert_(contains_spam("1dsdjallday.rukl jsd <stefa.pl---sd8")) bgneal@472: self.assert_(contains_spam(" 1djallday.rukl")) bgneal@472: self.assertFalse(contains_spam("this one is spam free.")) bgneal@472: bgneal@625: def test_deactivate_spammer(self): bgneal@625: """ bgneal@625: Test the deactivate_spammer() function. bgneal@625: bgneal@625: """ bgneal@625: user = User.objects.create_user('spammer_guy', '', 'password') bgneal@625: user.save() bgneal@625: bgneal@625: profile = user.get_profile() bgneal@625: profile.location = 'Spamville' bgneal@625: profile.country = 'US' bgneal@625: profile.birthday = datetime.date.today() bgneal@625: profile.occupation = 'Spammer' bgneal@625: profile.interests = 'Spamming websites' bgneal@625: profile.profile_text = 'I spam a lot.' bgneal@625: profile.signature = 'I spammed you!' bgneal@625: profile.save() bgneal@625: bgneal@625: now=datetime.datetime.now() bgneal@625: bgneal@625: # create a poll item to comment on bgneal@625: poll = Poll(start_date=now, bgneal@625: end_date=now, bgneal@625: is_enabled=True, bgneal@625: question='?') bgneal@625: poll.save() bgneal@625: bgneal@625: comment = Comment( bgneal@625: content_type=ContentType.objects.get_for_model(poll), bgneal@625: object_id=poll.pk, bgneal@625: user=user, bgneal@625: comment='Spam Spam Spam', bgneal@625: ip_address='127.0.0.1', bgneal@625: is_public=True, bgneal@625: is_removed=False) bgneal@625: comment.save() bgneal@625: bgneal@625: website = WebsiteProfile(user=user, name='spam', url='spam') bgneal@625: website.save() bgneal@625: bgneal@625: shout = Shout(user=user, shout_date=now, shout='spam') bgneal@625: shout.save() bgneal@625: bgneal@625: deactivate_spammer(user) bgneal@625: bgneal@625: profile = user.get_profile() bgneal@625: self.assertFalse(profile.location) bgneal@625: self.assertFalse(profile.country) bgneal@625: self.assertIsNone(profile.birthday) bgneal@625: self.assertFalse(profile.occupation) bgneal@625: self.assertFalse(profile.interests) bgneal@625: self.assertFalse(profile.profile_text) bgneal@625: self.assertFalse(profile.profile_html) bgneal@625: self.assertFalse(profile.signature) bgneal@625: self.assertFalse(profile.signature_html) bgneal@625: self.assertEqual(profile.status, STA_SPAMMER) bgneal@625: bgneal@625: status_date = datetime.date(year=profile.status_date.year, bgneal@625: month=profile.status_date.month, bgneal@625: day=profile.status_date.day) bgneal@625: self.assertEqual(status_date, datetime.date.today()) bgneal@625: bgneal@625: self.assertEqual(Comment.objects.filter(user=user).count(), 0) bgneal@625: self.assertEqual(WebsiteProfile.objects.filter(user=user).count(), 0) bgneal@625: self.assertEqual(Shout.objects.filter(user=user).count(), 0)