11import logging
22
33from django .conf import settings
4- from rest_framework .test import APIClient
5-
6- from django .urls import reverse
74from django .test import TestCase
5+ from django .urls import reverse
6+ from rest_framework .test import APIClient
87
8+ from core .models import ComsesGroups , Event , Job , SpamModeration
99from core .tests .base import UserFactory
1010from core .tests .permissions_base import BaseViewSetTestCase
1111from core .views import EventViewSet , JobViewSet
12- from core .models import Job , Event , SpamModeration , ComsesGroups
13- from .base import JobFactory , EventFactory
14-
12+ from .base import EventFactory , JobFactory
1513
1614logger = logging .getLogger (__name__ )
1715
@@ -162,9 +160,13 @@ def test_event_creation_with_honeypot_spam(self):
162160 )
163161 self .assertResponseCreated (response )
164162 event = Event .objects .get (title = data ["title" ])
165- self . assertTrue ( event . is_marked_spam )
163+
166164 self .assertIsNotNone (event .spam_moderation )
165+ self .assertEqual (
166+ event .spam_moderation .status , SpamModeration .Status .SPAM_LIKELY
167+ )
167168 self .assertEqual (event .spam_moderation .detection_method , "honeypot" )
169+ self .assertTrue (event .is_marked_spam )
168170
169171 def test_job_creation_with_timer_spam (self ):
170172 # FIXME: should incorporate how long a typical request takes to resolve
@@ -179,9 +181,11 @@ def test_job_creation_with_timer_spam(self):
179181 )
180182 self .assertResponseCreated (response )
181183 job = Job .objects .get (title = data ["title" ])
182- self . assertTrue ( job . is_marked_spam )
184+
183185 self .assertIsNotNone (job .spam_moderation )
186+ self .assertEqual (job .spam_moderation .status , SpamModeration .Status .SPAM_LIKELY )
184187 self .assertEqual (job .spam_moderation .detection_method , "form_submit_time" )
188+ self .assertTrue (job .is_marked_spam )
185189
186190 def test_mark_spam (self ):
187191 data = self .event_factory .get_request_data ()
@@ -193,18 +197,29 @@ def test_mark_spam(self):
193197 format = "json" ,
194198 )
195199 event = Event .objects .get (title = data ["title" ])
200+ self .assertIsNotNone (event .spam_moderation )
201+ self .assertEqual (
202+ event .spam_moderation .status , SpamModeration .Status .SCHEDULED_FOR_CHECK
203+ )
204+ # by default, all created objects will have is_marked_spam = False unless spam_moderation.status is explicitly SPAM or SPAM_LIKELY
196205 self .assertFalse (event .is_marked_spam )
197- self . assertIsNone ( event . spam_moderation )
206+
198207 response = self .client .post (
199208 reverse ("core:event-mark-spam" , kwargs = {"pk" : event .id }),
200209 data ,
201210 HTTP_ACCEPT = "application/json" ,
202211 format = "json" ,
203212 )
213+
204214 event .refresh_from_db ()
205- # non-moderators cannot mark content as spam
215+ # non-moderators cannot mark content as spam (set status to SPAM)
206216 self .assertEquals (response .status_code , 403 )
217+ self .assertIsNotNone (event .spam_moderation )
218+ self .assertEqual (
219+ event .spam_moderation .status , SpamModeration .Status .SCHEDULED_FOR_CHECK
220+ )
207221 self .assertFalse (event .is_marked_spam )
222+
208223 # check moderator
209224 self .client .login (
210225 username = self .moderator .username , password = self .user_factory .password
@@ -217,12 +232,17 @@ def test_mark_spam(self):
217232 format = "json" ,
218233 )
219234 event .refresh_from_db ()
220- self .assertTrue (event .is_marked_spam )
221235 self .assertIsNotNone (event .spam_moderation )
236+ self .assertEqual (event .spam_moderation .status , SpamModeration .Status .SPAM )
237+ self .assertTrue (event .is_marked_spam )
238+
222239 event .mark_not_spam (self .moderator )
223240 event .refresh_from_db ()
224- self . assertFalse ( event . is_marked_spam )
241+
225242 self .assertIsNotNone (event .spam_moderation )
243+ self .assertEqual (event .spam_moderation .status , SpamModeration .Status .NOT_SPAM )
244+ self .assertFalse (event .is_marked_spam )
245+
226246 # check superuser
227247 self .client .login (
228248 username = self .superuser .username , password = self .user_factory .password
@@ -234,9 +254,10 @@ def test_mark_spam(self):
234254 format = "json" ,
235255 )
236256 event .refresh_from_db ()
237- self . assertTrue ( event . is_marked_spam )
257+
238258 self .assertIsNotNone (event .spam_moderation )
239259 self .assertEqual (event .spam_moderation .status , SpamModeration .Status .SPAM )
260+ self .assertTrue (event .is_marked_spam )
240261
241262 def test_event_creation_without_spam (self ):
242263 data = self .event_factory .get_request_data ()
@@ -248,8 +269,12 @@ def test_event_creation_without_spam(self):
248269 )
249270 self .assertResponseCreated (response )
250271 event = Event .objects .get (title = data ["title" ])
272+
273+ self .assertIsNotNone (event .spam_moderation )
274+ self .assertEqual (
275+ event .spam_moderation .status , SpamModeration .Status .SCHEDULED_FOR_CHECK
276+ )
251277 self .assertFalse (event .is_marked_spam )
252- self .assertIsNone (event .spam_moderation )
253278
254279 def test_job_update_with_spam (self ):
255280 data = self .job_factory .get_request_data ()
@@ -261,8 +286,13 @@ def test_job_update_with_spam(self):
261286 )
262287 self .assertResponseCreated (response )
263288 job = Job .objects .get (title = data ["title" ])
289+
290+ self .assertIsNotNone (job .spam_moderation )
291+ self .assertEqual (
292+ job .spam_moderation .status , SpamModeration .Status .SCHEDULED_FOR_CHECK
293+ )
264294 self .assertFalse (job .is_marked_spam )
265- self . assertIsNone ( job . spam_moderation )
295+
266296 data = self .job_factory .get_request_data (
267297 honeypot_value = "spammy content" ,
268298 elapsed_time = settings .SPAM_LIKELY_SECONDS_THRESHOLD + 1 ,
@@ -274,9 +304,11 @@ def test_job_update_with_spam(self):
274304 format = "json" ,
275305 )
276306 job .refresh_from_db ()
277- self . assertTrue ( job . is_marked_spam )
307+
278308 self .assertIsNotNone (job .spam_moderation )
309+ self .assertEqual (job .spam_moderation .status , SpamModeration .Status .SPAM_LIKELY )
279310 self .assertEqual (job .spam_moderation .detection_method , "honeypot" )
311+ self .assertTrue (job .is_marked_spam )
280312
281313 def test_exclude_spam_from_public_views (self ):
282314 data = self .event_factory .get_request_data (honeypot_value = "spammy content" )
0 commit comments