def test_moderation_reason(self): # When a message is moderated, a reason is added to the metadata. user_manager = getUtility(IUserManager) anne = user_manager.create_address('*****@*****.**') msg = mfs("""\ From: [email protected] To: [email protected] Subject: A test message Message-ID: <ant> MIME-Version: 1.0 A message body. """) # Anne is in the message's senders list. self.assertIn('*****@*****.**', msg.senders) # Now run the rule. rule = moderation.NonmemberModeration() msgdata = {} result = rule.check(self._mlist, msg, msgdata) self.assertTrue(result, 'NonmemberModeration rule should hit') # The reason for moderation should be in the msgdata. reasons = msgdata['moderation_reasons'] self.assertEqual(reasons, ['The message is not from a list member']) # Now make Anne a moderated member... anne_member = self._mlist.subscribe(anne, MemberRole.member) anne_member.moderation_action = Action.hold # ...and run the rule again. rule = moderation.MemberModeration() msgdata = {} result = rule.check(self._mlist, msg, msgdata) self.assertTrue(result, 'MemberModeration rule should hit') # The reason for moderation should be in the msgdata. reasons = msgdata['moderation_reasons'] self.assertEqual(reasons, ['The message comes from a moderated member'])
def test_banned_address_linked_to_user(self): # Anne is subscribed to a mailing list as a user with her preferred # address. She also has a secondary address which is banned and which # she uses to post to the mailing list. Both the MemberModeration and # NonmemberModeration rules miss because the posting address is # banned. user_manager = getUtility(IUserManager) anne = user_manager.create_user('*****@*****.**') set_preferred(anne) self._mlist.subscribe(anne, MemberRole.member) anne.link(user_manager.create_address('*****@*****.**')) IBanManager(self._mlist).ban('*****@*****.**') msg = mfs("""\ From: [email protected] To: [email protected] Subject: A test message Message-ID: <ant> MIME-Version: 1.0 A message body. """) rule = moderation.MemberModeration() result = rule.check(self._mlist, msg, {}) self.assertFalse(result) rule = moderation.NonmemberModeration() result = rule.check(self._mlist, msg, {}) self.assertFalse(result)
def test_member_fallback_to_list_defaults(self): # https://gitlab.com/mailman/mailman/issues/189 self._mlist.default_member_action = Action.accept user_manager = getUtility(IUserManager) anne = user_manager.create_address('*****@*****.**') member = self._mlist.subscribe(anne, MemberRole.member) # Anne's moderation rule falls back to the list default. self.assertIsNone(member.moderation_action) rule = moderation.MemberModeration() msg = mfs("""\ From: [email protected] To: [email protected] Subject: A test message Message-ID: <ant> MIME-Version: 1.0 A message body. """) # First, the message gets accepted. msgdata = {} result = rule.check(self._mlist, msg, msgdata) self.assertTrue(result) self.assertEqual(msgdata.get('moderation_action'), 'accept') # Then the list's default member action is changed. self._mlist.default_member_action = Action.hold msg.replace_header('Message-ID', '<bee>') # This time, the message is held. result = rule.check(self._mlist, msg, msgdata) self.assertTrue(result) self.assertEqual(msgdata.get('moderation_action'), 'hold')
def test_linked_address_membermoderation_hits(self): # Anne subscribes to a mailing list as a user with her preferred # address. She also has a secondary linked address, and she uses this # to post to the mailing list. The MemberModeration rule hits because # Anne is a member. self._mlist.default_member_action = Action.accept user_manager = getUtility(IUserManager) anne = user_manager.create_user('*****@*****.**') set_preferred(anne) self._mlist.subscribe(anne, MemberRole.member) anne.link(user_manager.create_address('*****@*****.**')) rule = moderation.MemberModeration() msg = mfs("""\ From: [email protected] To: [email protected] Subject: A test message Message-ID: <ant> MIME-Version: 1.0 A message body. """) result = rule.check(self._mlist, msg, {}) self.assertTrue(result)