Mercurial > public > sg101
comparison 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 |
comparison
equal
deleted
inserted
replaced
1213:5e898f91fe36 | 1214:9a011e2de2f6 |
---|---|
7 from django.test import TestCase | 7 from django.test import TestCase |
8 from django.contrib.auth.models import User | 8 from django.contrib.auth.models import User |
9 from django.contrib.contenttypes.models import ContentType | 9 from django.contrib.contenttypes.models import ContentType |
10 from django.core.cache import cache | 10 from django.core.cache import cache |
11 | 11 |
12 from mock import call, patch, Mock | |
13 | |
12 from antispam import SPAM_PHRASE_KEY | 14 from antispam import SPAM_PHRASE_KEY |
13 from antispam.models import SpamPhrase | 15 from antispam.models import SpamPhrase |
14 from antispam.utils import contains_spam, deactivate_spammer | 16 from antispam.utils import contains_spam, deactivate_spammer, spam_check |
15 | |
16 from comments.models import Comment | 17 from comments.models import Comment |
17 from polls.models import Poll | 18 from polls.models import Poll |
18 from elsewhere.models import WebsiteProfile | 19 from elsewhere.models import WebsiteProfile |
19 from shoutbox.models import Shout | 20 from shoutbox.models import Shout |
20 from bio.models import STA_SPAMMER | 21 from bio.models import STA_ACTIVE, STA_SPAMMER, STA_STRANGER, STA_SUSPENDED |
21 | 22 |
22 | 23 |
23 class AntispamCase(TestCase): | 24 class AntispamUtilsCase(TestCase): |
24 | 25 |
25 def test_no_phrases(self): | 26 def test_no_phrases(self): |
26 """ | 27 """ |
27 Tests that an empty spam phrase table works. | 28 Tests that an empty spam phrase table works. |
28 | 29 |
37 """ | 38 """ |
38 SpamPhrase.objects.create(phrase="grytner") | 39 SpamPhrase.objects.create(phrase="grytner") |
39 SpamPhrase.objects.create(phrase="allday.ru") | 40 SpamPhrase.objects.create(phrase="allday.ru") |
40 SpamPhrase.objects.create(phrase="stefa.pl") | 41 SpamPhrase.objects.create(phrase="stefa.pl") |
41 | 42 |
42 self.assert_(contains_spam("grytner")) | 43 self.assertTrue(contains_spam("grytner")) |
43 self.assert_(contains_spam("11grytner")) | 44 self.assertTrue(contains_spam("11grytner")) |
44 self.assert_(contains_spam("11grytner>")) | 45 self.assertTrue(contains_spam("11grytner>")) |
45 self.assert_(contains_spam("1djkl jsd stefa.pl")) | 46 self.assertTrue(contains_spam("1djkl jsd stefa.pl")) |
46 self.assert_(contains_spam("1djkl jsd <stefa.pl---sd8")) | 47 self.assertTrue(contains_spam("1djkl jsd <stefa.pl---sd8")) |
47 self.assert_(contains_spam("1dsdjallday.rukl jsd <stefa.pl---sd8")) | 48 self.assertTrue(contains_spam("1dsdjallday.rukl jsd <stefa.pl---sd8")) |
48 self.assert_(contains_spam(" 1djallday.rukl")) | 49 self.assertTrue(contains_spam(" 1djallday.rukl")) |
49 self.assertFalse(contains_spam("this one is spam free.")) | 50 self.assertFalse(contains_spam("this one is spam free.")) |
50 | 51 |
51 def test_deactivate_spammer(self): | 52 def test_deactivate_spammer(self): |
52 """ | 53 """ |
53 Test the deactivate_spammer() function. | 54 Test the deactivate_spammer() function. |
111 self.assertEqual(status_date, datetime.date.today()) | 112 self.assertEqual(status_date, datetime.date.today()) |
112 | 113 |
113 self.assertEqual(Comment.objects.filter(user=user).count(), 0) | 114 self.assertEqual(Comment.objects.filter(user=user).count(), 0) |
114 self.assertEqual(WebsiteProfile.objects.filter(user=user).count(), 0) | 115 self.assertEqual(WebsiteProfile.objects.filter(user=user).count(), 0) |
115 self.assertEqual(Shout.objects.filter(user=user).count(), 0) | 116 self.assertEqual(Shout.objects.filter(user=user).count(), 0) |
117 | |
118 | |
119 class AntispamSpamCheckTestCase(TestCase): | |
120 def setUp(self): | |
121 user = User.objects.create_user('spammer_guy', '', 'password') | |
122 user.save() | |
123 SpamPhrase.objects.create(phrase="grytner") | |
124 | |
125 @patch('antispam.utils.email_admins') | |
126 def test_not_a_stranger(self, email_admins_mock): | |
127 user = User.objects.get(username='spammer_guy') | |
128 user.profile.status = STA_ACTIVE | |
129 user.profile.save(content_update=False) | |
130 | |
131 request = Mock() | |
132 request.user = user | |
133 result = spam_check(request, 'grytner') | |
134 | |
135 self.assertFalse(result) | |
136 user = User.objects.get(username='spammer_guy') | |
137 self.assertTrue(user.is_active) | |
138 self.assertEqual(user.profile.status, STA_ACTIVE) | |
139 self.assertEqual(email_admins_mock.mock_calls, []) | |
140 | |
141 @patch('antispam.utils.email_admins') | |
142 def test_stranger_no_spam(self, email_admins_mock): | |
143 user = User.objects.get(username='spammer_guy') | |
144 user.profile.status = STA_ACTIVE | |
145 user.profile.save(content_update=False) | |
146 | |
147 request = Mock() | |
148 request.user = user | |
149 result = spam_check(request, 'not spam') | |
150 | |
151 self.assertFalse(result) | |
152 user = User.objects.get(username='spammer_guy') | |
153 self.assertTrue(user.is_active) | |
154 self.assertEqual(user.profile.status, STA_ACTIVE) | |
155 self.assertEqual(email_admins_mock.mock_calls, []) | |
156 | |
157 @patch('antispam.utils.email_admins') | |
158 def test_stranger_with_spam(self, email_admins_mock): | |
159 user = User.objects.get(username='spammer_guy') | |
160 user.profile.status = STA_STRANGER | |
161 user.profile.save(content_update=False) | |
162 | |
163 request = Mock() | |
164 request.user = user | |
165 request.path = '/some/path' | |
166 request.META = {'REMOTE_ADDR': '127.0.0.1'} | |
167 result = spam_check(request, 'grytner') | |
168 | |
169 self.assertTrue(result) | |
170 user = User.objects.get(username='spammer_guy') | |
171 self.assertFalse(user.is_active) | |
172 self.assertEqual(user.profile.status, STA_SUSPENDED) | |
173 | |
174 expected_msg = ('SPAM FILTER TRIPPED by spammer_guy\n' | |
175 'PATH: /some/path\n' | |
176 'IP: 127.0.0.1\n' | |
177 'Message:\n' | |
178 'grytner\n') | |
179 self.assertEqual(email_admins_mock.mock_calls, [ | |
180 call('SPAM FILTER TRIPPED BY spammer_guy', expected_msg), | |
181 ]) |