def test_moderating_updates_total_messages(self): """thread.total_messages should be updated when saving.""" flag_user = self.create_user() superuser = self.create_superuser() thread_to_approve = self.create_thread() thread_to_approve.first_message.flag(flag_user) thread_to_approve.total_messages = 0 thread_to_approve.save() thread_to_veto = self.create_thread() thread_to_veto.first_message.flag(flag_user) thread_to_veto.total_messages = 1 thread_to_veto.save() self.assertEqual(thread_to_approve.total_messages, 0) self.assertEqual(thread_to_veto.total_messages, 1) moderate_messages( {'approved': [thread_to_approve.first_message.pk], 'veto': [thread_to_veto.first_message.pk]}, superuser ) thread_to_approve = Thread.objects.get(pk=thread_to_approve.pk) thread_to_veto = Thread.objects.get(pk=thread_to_veto.pk) self.assertEqual(thread_to_approve.total_messages, 1) self.assertEqual(thread_to_veto.total_messages, 0)
def test_moderate_messages_updates_flags(self): """Flags should be updated with moderation action.""" thread1 = self.create_thread() thread2 = self.create_thread() message1 = thread1.first_message message2 = thread2.first_message message1.flag(self.normal_user) message1.flag(self.staff_user) message2.flag(self.normal_user) self.assertEqual( message1.flags.filter(moderation_action__isnull=True).count(), 2 ) self.assertEqual( message2.flags.filter(moderation_action__isnull=True).count(), 1 ) moderate_messages( {'approved': [message1.pk, message2.pk]}, self.superuser) self.assertFalse( message1.flags.filter(moderation_action__isnull=True).exists()) self.assertFalse( message2.flags.filter(moderation_action__isnull=True).exists())
def test_moderating_updates_total_messages(self): """thread.total_messages should be updated when saving.""" flag_user = self.create_user() superuser = self.create_superuser() thread_to_approve = self.create_thread() thread_to_approve.first_message.flag(flag_user) thread_to_approve.total_messages = 0 thread_to_approve.save() thread_to_veto = self.create_thread() thread_to_veto.first_message.flag(flag_user) thread_to_veto.total_messages = 1 thread_to_veto.save() self.assertEqual(thread_to_approve.total_messages, 0) self.assertEqual(thread_to_veto.total_messages, 1) moderate_messages( { 'approved': [thread_to_approve.first_message.pk], 'veto': [thread_to_veto.first_message.pk] }, superuser) thread_to_approve = Thread.objects.get(pk=thread_to_approve.pk) thread_to_veto = Thread.objects.get(pk=thread_to_veto.pk) self.assertEqual(thread_to_approve.total_messages, 1) self.assertEqual(thread_to_veto.total_messages, 0)
def test_non_superuser_needs_correct_permissions_to_moderate(self): """Test that non-superusers need correct permissions for moderation""" Message.objects.update(status='pending') newuser = mommy.make(get_user_model()) newuser.add_to_group(self.group2.pk) self.group2.owners.add(newuser) self.assertIn(self.message3.thread.group, newuser.groups_moderating) self.assertNotIn(self.message1.thread.group, newuser.groups_moderating) changes = { 'spam': [self.message1.pk], 'approved': [self.message3.pk] } total = moderate_messages(changes, newuser) self.assertTrue( self.message3.messagemoderationaction_set.filter( newstatus='approved').exists() ) self.assertEqual(total, 1) # We need to grab message1 from the database again to confirm it has # not changed message1 = Message.objects.get(pk=self.message1.pk) self.assertEqual(message1.status, 'pending')
def test_moderate_messages_updates_flags(self): """Flags should be updated with moderation action.""" thread1 = self.create_thread() thread2 = self.create_thread() message1 = thread1.first_message message2 = thread2.first_message message1.flag(self.normal_user) message1.flag(self.staff_user) message2.flag(self.normal_user) self.assertEqual( message1.flags.filter(moderation_action__isnull=True).count(), 2) self.assertEqual( message2.flags.filter(moderation_action__isnull=True).count(), 1) moderate_messages({'approved': [message1.pk, message2.pk]}, self.superuser) self.assertFalse( message1.flags.filter(moderation_action__isnull=True).exists()) self.assertFalse( message2.flags.filter(moderation_action__isnull=True).exists())
def test_moderate_messages(self): """Test that messages can be moderated""" Message.objects.update(status='pending') # Confirm the update has been applied self.assertFalse( Message.objects.filter(pk=self.message1.pk, status='spam').exists()) self.assertFalse( Message.objects.filter(pk=self.message2.pk, status='approved').exists()) self.assertFalse( Message.objects.filter(pk=self.message3.pk, status='vetoed').exists()) changes = { 'spam': [self.message1.pk], 'approved': [self.message2.pk], 'vetoed': [self.message3.pk] } user = self.create_user() self.add_perm(user, 'can_moderate_all_messages', 'accounts', 'user') total = moderate_messages(changes, user) # Intercepting the logger is by far the easiest way to confirm which # fields were actually processed self.assertEqual( MessageModerationAction.objects.filter( message__in=[self.message1, self.message2, self.message3 ]).count(), 3) # Confirm correct results self.assertTrue( Message.objects.filter(pk=self.message1.pk, status='spam').exists()) self.assertTrue( Message.objects.filter(pk=self.message2.pk, status='approved').exists()) self.assertTrue( Message.objects.filter(pk=self.message3.pk, status='vetoed').exists()) # Confirm the number is correct self.assertEqual(total, 3)
def test_moderate_messages(self): """Test that messages can be moderated""" Message.objects.update(status='pending') # Confirm the update has been applied self.assertFalse(Message.objects.filter( pk=self.message1.pk, status='spam').exists()) self.assertFalse(Message.objects.filter( pk=self.message2.pk, status='approved').exists()) self.assertFalse(Message.objects.filter( pk=self.message3.pk, status='vetoed').exists()) changes = { 'spam': [self.message1.pk], 'approved': [self.message2.pk], 'vetoed': [self.message3.pk] } user = self.create_user() self.add_perm(user, 'can_moderate_all_messages', 'accounts', 'user') total = moderate_messages(changes, user) # Intercepting the logger is by far the easiest way to confirm which # fields were actually processed self.assertEqual( MessageModerationAction.objects.filter( message__in=[self.message1, self.message2, self.message3] ).count(), 3 ) # Confirm correct results self.assertTrue(Message.objects.filter( pk=self.message1.pk, status='spam').exists()) self.assertTrue(Message.objects.filter( pk=self.message2.pk, status='approved').exists()) self.assertTrue(Message.objects.filter( pk=self.message3.pk, status='vetoed').exists()) # Confirm the number is correct self.assertEqual(total, 3)
def test_non_superuser_needs_correct_permissions_to_moderate(self): """Test that non-superusers need correct permissions for moderation""" Message.objects.update(status='pending') newuser = mommy.make(get_user_model()) newuser.add_to_group(self.group2.pk) self.group2.owners.add(newuser) self.assertIn(self.message3.thread.group, newuser.groups_moderating) self.assertNotIn(self.message1.thread.group, newuser.groups_moderating) changes = {'spam': [self.message1.pk], 'approved': [self.message3.pk]} total = moderate_messages(changes, newuser) self.assertTrue( self.message3.messagemoderationaction_set.filter( newstatus='approved').exists()) self.assertEqual(total, 1) # We need to grab message1 from the database again to confirm it has # not changed message1 = Message.objects.get(pk=self.message1.pk) self.assertEqual(message1.status, 'pending')
def post(self, request, **kwargs): """Process moderation changes.""" change_count = 0 actions = defaultdict(list) for message_string, action in request.POST.iteritems(): if not message_string.startswith('message-'): continue message_id = message_string.split('-')[1] if message_id.isdigit() and action in POSSIBLE_ACTIONS: actions[action].append(message_id) if actions: change_count += moderate_messages(actions, request.user) if not change_count: messages.warning(request, 'No Messages Updated') else: pluralized_message = 'Messages' if change_count > 1 else 'Message' messages.success( request, "Updated %s %s" % (change_count, pluralized_message)) cache.delete('%s_messages_to_mod' % self.request.user.pk) return redirect(self.get_success_url(request))
def post(self, request, **kwargs): """Process moderation changes.""" change_count = 0 actions = defaultdict(list) for message_string, action in request.POST.iteritems(): if not message_string.startswith('message-'): continue message_id = message_string.split('-')[1] if message_id.isdigit() and action in POSSIBLE_ACTIONS: actions[action].append(message_id) if actions: change_count += moderate_messages(actions, request.user) if not change_count: messages.warning(request, 'No Messages Updated') else: pluralized_message = 'Messages' if change_count > 1 else 'Message' messages.success( request, "Updated %s %s" % (change_count, pluralized_message)) cache.delete('%s_messages_to_mod' % self.request.user.pk) return redirect(self.get_success_url(request))