From ba9ec247e0075b5e2813127f8349a770c2008f84 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 09 2020 19:24:34 +0000 Subject: Add some more tests to ensure we do not notify on @mention in codeblocks Signed-off-by: Pierre-Yves Chibon --- diff --git a/tests/test_pagure_lib_notify_email.py b/tests/test_pagure_lib_notify_email.py index b0d9ea4..c5d1c49 100644 --- a/tests/test_pagure_lib_notify_email.py +++ b/tests/test_pagure_lib_notify_email.py @@ -256,6 +256,150 @@ http://localhost.localdomain/test/issue/1 self.assertEqual(kwargs["user_from"], self.user1.fullname) @mock.patch("pagure.lib.notify.send_email") + def test_user_notified_new_comment_not_in_code_block_incline( + self, fakemail + ): + """Ensures that @mention doesn't over-reach in code-blocks.""" + self.comment1.comment = ( + "So apparently they said ``@foo.com is awesome`` :)" + ) + g = munch.Munch() + g.fas_user = tests.FakeUser(username="pingou") + g.authenticated = True + g.session = self.session + with mock.patch("flask.g", g): + pagure.lib.notify.notify_new_comment(self.comment1) + + (_, args, kwargs) = fakemail.mock_calls[0] + + # Mail should be sent to both users + self.assertEqual(args[2], "bar@pingou.com") + + # Mail ID should be comment #1's mail ID... + self.assertEqual(kwargs["mail_id"], self.comment1.mail_id) + + # In reply to issue #1's mail ID. + self.assertEqual(kwargs["in_reply_to"], self.issue1.mail_id) + + # Project name should be...project (full) name. + self.assertEqual(kwargs["project_name"], self.project1.fullname) + + # Mail should be from user1 (who wrote the comment). + self.assertEqual(kwargs["user_from"], self.user1.fullname) + + @mock.patch("pagure.lib.notify.send_email") + def test_user_notified_new_comment_not_in_code_block_4_backtick( + self, fakemail + ): + """Ensures that @mention doesn't over-reach in code-blocks.""" + self.comment1.comment = """ +So apparently they said +```` +@foo.com is awesome and @foo is great + +We all love @foo ! +```` +:) +""" + g = munch.Munch() + g.fas_user = tests.FakeUser(username="pingou") + g.authenticated = True + g.session = self.session + with mock.patch("flask.g", g): + pagure.lib.notify.notify_new_comment(self.comment1) + + (_, args, kwargs) = fakemail.mock_calls[0] + + # Mail should be sent to both users + self.assertEqual(args[2], "bar@pingou.com") + + # Mail ID should be comment #1's mail ID... + self.assertEqual(kwargs["mail_id"], self.comment1.mail_id) + + # In reply to issue #1's mail ID. + self.assertEqual(kwargs["in_reply_to"], self.issue1.mail_id) + + # Project name should be...project (full) name. + self.assertEqual(kwargs["project_name"], self.project1.fullname) + + # Mail should be from user1 (who wrote the comment). + self.assertEqual(kwargs["user_from"], self.user1.fullname) + + @mock.patch("pagure.lib.notify.send_email") + def test_user_notified_new_comment_not_in_code_block_3_backticks( + self, fakemail + ): + """Ensures that @mention doesn't over-reach in code-blocks.""" + self.comment1.comment = """ +So apparently they said +``` +@foo.com is awesome and @foo is great + +We all love @foo ! +``` +:) +""" + g = munch.Munch() + g.fas_user = tests.FakeUser(username="pingou") + g.authenticated = True + g.session = self.session + with mock.patch("flask.g", g): + pagure.lib.notify.notify_new_comment(self.comment1) + + (_, args, kwargs) = fakemail.mock_calls[0] + + # Mail should be sent to both users + self.assertEqual(args[2], "bar@pingou.com") + + # Mail ID should be comment #1's mail ID... + self.assertEqual(kwargs["mail_id"], self.comment1.mail_id) + + # In reply to issue #1's mail ID. + self.assertEqual(kwargs["in_reply_to"], self.issue1.mail_id) + + # Project name should be...project (full) name. + self.assertEqual(kwargs["project_name"], self.project1.fullname) + + # Mail should be from user1 (who wrote the comment). + self.assertEqual(kwargs["user_from"], self.user1.fullname) + + @mock.patch("pagure.lib.notify.send_email") + def test_user_notified_new_comment_not_in_code_block_tilde(self, fakemail): + """Ensures that @mention doesn't over-reach in code-blocks.""" + self.comment1.comment = """ +So apparently they said +~~~~ +@foo.com is awesome and @foo is great + +We all love @foo ! +~~~~ +:) +""" + g = munch.Munch() + g.fas_user = tests.FakeUser(username="pingou") + g.authenticated = True + g.session = self.session + with mock.patch("flask.g", g): + pagure.lib.notify.notify_new_comment(self.comment1) + + (_, args, kwargs) = fakemail.mock_calls[0] + + # Mail should be sent to both users + self.assertEqual(args[2], "bar@pingou.com") + + # Mail ID should be comment #1's mail ID... + self.assertEqual(kwargs["mail_id"], self.comment1.mail_id) + + # In reply to issue #1's mail ID. + self.assertEqual(kwargs["in_reply_to"], self.issue1.mail_id) + + # Project name should be...project (full) name. + self.assertEqual(kwargs["project_name"], self.project1.fullname) + + # Mail should be from user1 (who wrote the comment). + self.assertEqual(kwargs["user_from"], self.user1.fullname) + + @mock.patch("pagure.lib.notify.send_email") def test_notify_new_issue_namespaced( self, fakemail ): # pylint: disable=invalid-name