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)