diff --git a/zerver/tests/test_email_notifications.py b/zerver/tests/test_email_notifications.py
index b7b5cb2908..a8e61edd68 100644
--- a/zerver/tests/test_email_notifications.py
+++ b/zerver/tests/test_email_notifications.py
@@ -8,7 +8,7 @@ from django.core import mail
from django.test import override_settings
from django_auth_ldap.config import LDAPSearch
from email.utils import formataddr
-from mock import patch, MagicMock
+from mock import patch
from typing import List, Optional
from zerver.lib.email_notifications import fix_emojis, handle_missedmessage_emails, \
@@ -136,14 +136,16 @@ class TestMissedMessages(ZulipTestCase):
def _get_tokens(self) -> List[str]:
return [str(random.getrandbits(32)) for _ in range(30)]
- def _test_cases(self, tokens: List[str], msg_id: int, body: str, email_subject: str,
+ def _test_cases(self, msg_id: int, body: str, email_subject: str,
send_as_user: bool, verify_html_body: bool=False,
show_message_content: bool=True,
verify_body_does_not_include: Optional[List[str]]=None,
trigger: str='') -> None:
othello = self.example_user('othello')
hamlet = self.example_user('hamlet')
- handle_missedmessage_emails(hamlet.id, [{'message_id': msg_id, 'trigger': trigger}])
+ tokens = self._get_tokens()
+ with patch('zerver.lib.email_mirror.generate_random_token', side_effect=tokens):
+ handle_missedmessage_emails(hamlet.id, [{'message_id': msg_id, 'trigger': trigger}])
if settings.EMAIL_GATEWAY_PATTERN != "":
reply_to_addresses = [settings.EMAIL_GATEWAY_PATTERN % (u'mm' + t,) for t in tokens]
reply_to_emails = [formataddr(("Zulip", address)) for address in reply_to_addresses]
@@ -166,13 +168,7 @@ class TestMissedMessages(ZulipTestCase):
for text in verify_body_does_not_include:
self.assertNotIn(text, self.normalize_string(msg.body))
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _realm_name_in_missed_message_email_subject(self,
- realm_name_in_notifications: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
+ def _realm_name_in_missed_message_email_subject(self, realm_name_in_notifications: bool) -> None:
msg_id = self.send_personal_message(
self.example_email('othello'),
self.example_email('hamlet'),
@@ -183,15 +179,10 @@ class TestMissedMessages(ZulipTestCase):
if realm_name_in_notifications:
email_subject = 'PMs with Othello, the Moor of Venice [Zulip Dev]'
- self._test_cases(tokens, msg_id, body, email_subject, False)
+ self._test_cases(msg_id, body, email_subject, False)
- @patch('zerver.lib.email_mirror.generate_random_token')
def _extra_context_in_missed_stream_messages_mention(self, send_as_user: bool,
- mock_random_token: MagicMock,
show_message_content: bool=True) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
for i in range(0, 11):
self.send_stream_message(self.example_email('othello'), "Denmark", content=str(i))
self.send_stream_message(
@@ -213,18 +204,13 @@ class TestMissedMessages(ZulipTestCase):
verify_body_does_not_include = ['Denmark > test', 'Othello, the Moor of Venice',
'1 2 3 4 5 6 7 8 9 10 @**King Hamlet**', 'private', 'group',
'Reply to this email directly, or view it in Zulip']
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user,
+ self._test_cases(msg_id, body, email_subject, send_as_user,
show_message_content=show_message_content,
verify_body_does_not_include=verify_body_does_not_include,
trigger='mentioned')
- @patch('zerver.lib.email_mirror.generate_random_token')
def _extra_context_in_missed_stream_messages_wildcard_mention(self, send_as_user: bool,
- mock_random_token: MagicMock,
show_message_content: bool=True) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
for i in range(1, 6):
self.send_stream_message(self.example_email('othello'), "Denmark", content=str(i))
self.send_stream_message(
@@ -246,17 +232,12 @@ class TestMissedMessages(ZulipTestCase):
verify_body_does_not_include = ['Denmark > test', 'Othello, the Moor of Venice',
'1 2 3 4 5 @**all**', 'private', 'group',
'Reply to this email directly, or view it in Zulip']
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user,
+ self._test_cases(msg_id, body, email_subject, send_as_user,
show_message_content=show_message_content,
verify_body_does_not_include=verify_body_does_not_include,
trigger='wildcard_mentioned')
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _extra_context_in_missed_stream_messages_email_notify(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
+ def _extra_context_in_missed_stream_messages_email_notify(self, send_as_user: bool) -> None:
for i in range(0, 11):
self.send_stream_message(self.example_email('othello'), "Denmark", content=str(i))
self.send_stream_message(
@@ -268,14 +249,9 @@ class TestMissedMessages(ZulipTestCase):
body = ("Othello, the Moor of Venice: 1 2 3 4 5 6 7 8 9 10 12 -- "
"You are receiving this because you have email notifications enabled for this stream.")
email_subject = '#Denmark > test'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user, trigger='stream_email_notify')
-
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _extra_context_in_missed_stream_messages_mention_two_senders(
- self, send_as_user: bool, mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ self._test_cases(msg_id, body, email_subject, send_as_user, trigger='stream_email_notify')
+ def _extra_context_in_missed_stream_messages_mention_two_senders(self, send_as_user: bool) -> None:
for i in range(0, 3):
self.send_stream_message(self.example_email('cordelia'), "Denmark", str(i))
msg_id = self.send_stream_message(
@@ -284,15 +260,10 @@ class TestMissedMessages(ZulipTestCase):
body = ("Cordelia Lear: 0 1 2 Othello, the Moor of Venice: @**King Hamlet** -- "
"You are receiving this because you were mentioned in Zulip Dev.")
email_subject = '#Denmark > test'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user, trigger='mentioned')
+ self._test_cases(msg_id, body, email_subject, send_as_user, trigger='mentioned')
- @patch('zerver.lib.email_mirror.generate_random_token')
def _extra_context_in_personal_missed_stream_messages(self, send_as_user: bool,
- mock_random_token: MagicMock,
show_message_content: bool=True) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
msg_id = self.send_personal_message(
self.example_email('othello'),
self.example_email('hamlet'),
@@ -308,16 +279,11 @@ class TestMissedMessages(ZulipTestCase):
email_subject = 'New missed messages'
verify_body_does_not_include = ['Othello, the Moor of Venice', 'Extremely personal message!',
'mentioned', 'group', 'Reply to this email directly, or view it in Zulip']
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user,
+ self._test_cases(msg_id, body, email_subject, send_as_user,
show_message_content=show_message_content,
verify_body_does_not_include=verify_body_does_not_include)
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _reply_to_email_in_personal_missed_stream_messages(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
+ def _reply_to_email_in_personal_missed_stream_messages(self, send_as_user: bool) -> None:
msg_id = self.send_personal_message(
self.example_email('othello'),
self.example_email('hamlet'),
@@ -325,14 +291,9 @@ class TestMissedMessages(ZulipTestCase):
)
body = 'Reply to this email directly, or view it in Zulip'
email_subject = 'PMs with Othello, the Moor of Venice'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user)
-
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _reply_warning_in_personal_missed_stream_messages(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ self._test_cases(msg_id, body, email_subject, send_as_user)
+ def _reply_warning_in_personal_missed_stream_messages(self, send_as_user: bool) -> None:
msg_id = self.send_personal_message(
self.example_email('othello'),
self.example_email('hamlet'),
@@ -340,15 +301,10 @@ class TestMissedMessages(ZulipTestCase):
)
body = 'Do not reply to this message.'
email_subject = 'PMs with Othello, the Moor of Venice'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user)
+ self._test_cases(msg_id, body, email_subject, send_as_user)
- @patch('zerver.lib.email_mirror.generate_random_token')
def _extra_context_in_huddle_missed_stream_messages_two_others(self, send_as_user: bool,
- mock_random_token: MagicMock,
show_message_content: bool=True) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
msg_id = self.send_huddle_message(
self.example_email('othello'),
[
@@ -368,16 +324,11 @@ class TestMissedMessages(ZulipTestCase):
verify_body_does_not_include = ['Iago', 'Othello, the Moor of Venice Othello, the Moor of Venice',
'Group personal message!', 'mentioned',
'Reply to this email directly, or view it in Zulip']
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user,
+ self._test_cases(msg_id, body, email_subject, send_as_user,
show_message_content=show_message_content,
verify_body_does_not_include=verify_body_does_not_include)
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _extra_context_in_huddle_missed_stream_messages_three_others(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
+ def _extra_context_in_huddle_missed_stream_messages_three_others(self, send_as_user: bool) -> None:
msg_id = self.send_huddle_message(
self.example_email('othello'),
[
@@ -390,14 +341,9 @@ class TestMissedMessages(ZulipTestCase):
body = 'Othello, the Moor of Venice: Group personal message! -- Reply'
email_subject = 'Group PMs with Cordelia Lear, Iago, and Othello, the Moor of Venice'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user)
-
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _extra_context_in_huddle_missed_stream_messages_many_others(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ self._test_cases(msg_id, body, email_subject, send_as_user)
+ def _extra_context_in_huddle_missed_stream_messages_many_others(self, send_as_user: bool) -> None:
msg_id = self.send_huddle_message(self.example_email('othello'),
[self.example_email('hamlet'),
self.example_email('iago'),
@@ -407,14 +353,9 @@ class TestMissedMessages(ZulipTestCase):
body = 'Othello, the Moor of Venice: Group personal message! -- Reply'
email_subject = 'Group PMs with Cordelia Lear, Iago, and 2 others'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user)
-
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _deleted_message_in_missed_stream_messages(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ self._test_cases(msg_id, body, email_subject, send_as_user)
+ def _deleted_message_in_missed_stream_messages(self, send_as_user: bool) -> None:
msg_id = self.send_stream_message(
self.example_email('othello'), "denmark",
'@**King Hamlet** to be deleted')
@@ -428,12 +369,7 @@ class TestMissedMessages(ZulipTestCase):
handle_missedmessage_emails(hamlet.id, [{'message_id': msg_id}])
self.assertEqual(len(mail.outbox), 0)
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _deleted_message_in_personal_missed_stream_messages(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
+ def _deleted_message_in_personal_missed_stream_messages(self, send_as_user: bool) -> None:
msg_id = self.send_personal_message(self.example_email('othello'),
self.example_email('hamlet'),
'Extremely personal message! to be deleted!')
@@ -447,12 +383,7 @@ class TestMissedMessages(ZulipTestCase):
handle_missedmessage_emails(hamlet.id, [{'message_id': msg_id}])
self.assertEqual(len(mail.outbox), 0)
- @patch('zerver.lib.email_mirror.generate_random_token')
- def _deleted_message_in_huddle_missed_stream_messages(self, send_as_user: bool,
- mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
-
+ def _deleted_message_in_huddle_missed_stream_messages(self, send_as_user: bool) -> None:
msg_id = self.send_huddle_message(
self.example_email('othello'),
[
@@ -615,10 +546,7 @@ class TestMissedMessages(ZulipTestCase):
mail.outbox = []
self._extra_context_in_personal_missed_stream_messages(False, show_message_content=False)
- @patch('zerver.lib.email_mirror.generate_random_token')
- def test_realm_emoji_in_missed_message(self, mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ def test_realm_emoji_in_missed_message(self) -> None:
realm = get_realm("zulip")
msg_id = self.send_personal_message(
@@ -629,13 +557,9 @@ class TestMissedMessages(ZulipTestCase):
realm.id, realm_emoji_id,)
body = '' % (realm_emoji_url,)
email_subject = 'PMs with Othello, the Moor of Venice'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user=False, verify_html_body=True)
-
- @patch('zerver.lib.email_mirror.generate_random_token')
- def test_emojiset_in_missed_message(self, mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ self._test_cases(msg_id, body, email_subject, send_as_user=False, verify_html_body=True)
+ def test_emojiset_in_missed_message(self) -> None:
hamlet = self.example_user('hamlet')
hamlet.emojiset = 'twitter'
hamlet.save(update_fields=['emojiset'])
@@ -644,13 +568,9 @@ class TestMissedMessages(ZulipTestCase):
'Extremely personal message with a hamburger :hamburger:!')
body = '
'
email_subject = 'PMs with Othello, the Moor of Venice'
- self._test_cases(tokens, msg_id, body, email_subject, send_as_user=False, verify_html_body=True)
-
- @patch('zerver.lib.email_mirror.generate_random_token')
- def test_stream_link_in_missed_message(self, mock_random_token: MagicMock) -> None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ self._test_cases(msg_id, body, email_subject, send_as_user=False, verify_html_body=True)
+ def test_stream_link_in_missed_message(self) -> None:
msg_id = self.send_personal_message(
self.example_email('othello'), self.example_email('hamlet'),
'Come and join us in #**Verona**.')
@@ -658,13 +578,9 @@ class TestMissedMessages(ZulipTestCase):
href = "http://zulip.testserver/#narrow/stream/{stream_id}-Verona".format(stream_id=stream_id)
body = '#Verona None:
- tokens = self._get_tokens()
- mock_random_token.side_effect = tokens
+ self._test_cases(msg_id, body, email_subject, send_as_user=False, verify_html_body=True)
+ def test_sender_name_in_missed_message(self) -> None:
hamlet = self.example_user('hamlet')
msg_id_1 = self.send_stream_message(self.example_email('iago'),
"Denmark",
@@ -696,11 +612,7 @@ class TestMissedMessages(ZulipTestCase):
self.assertIn('>\n \n
Hello
\n', mail.outbox[2].alternatives[0][0]) - @patch('zerver.lib.email_mirror.generate_random_token') - def test_multiple_missed_personal_messages(self, mock_random_token: MagicMock) -> None: - tokens = self._get_tokens() - mock_random_token.side_effect = tokens - + def test_multiple_missed_personal_messages(self) -> None: hamlet = self.example_user('hamlet') msg_id_1 = self.send_personal_message(self.example_email('othello'), hamlet.email, @@ -719,11 +631,7 @@ class TestMissedMessages(ZulipTestCase): email_subject = 'PMs with Iago' self.assertEqual(mail.outbox[1].subject, email_subject) - @patch('zerver.lib.email_mirror.generate_random_token') - def test_multiple_stream_messages(self, mock_random_token: MagicMock) -> None: - tokens = self._get_tokens() - mock_random_token.side_effect = tokens - + def test_multiple_stream_messages(self) -> None: hamlet = self.example_user('hamlet') msg_id_1 = self.send_stream_message(self.example_email('othello'), "Denmark", @@ -740,12 +648,8 @@ class TestMissedMessages(ZulipTestCase): email_subject = '#Denmark > test' self.assertEqual(mail.outbox[0].subject, email_subject) - @patch('zerver.lib.email_mirror.generate_random_token') - def test_multiple_stream_messages_and_mentions(self, mock_random_token: MagicMock) -> None: + def test_multiple_stream_messages_and_mentions(self) -> None: """Subject should be stream name and topic as usual.""" - tokens = self._get_tokens() - mock_random_token.side_effect = tokens - hamlet = self.example_user('hamlet') msg_id_1 = self.send_stream_message(self.example_email('iago'), "Denmark", @@ -762,13 +666,9 @@ class TestMissedMessages(ZulipTestCase): email_subject = '#Denmark > test' self.assertEqual(mail.outbox[0].subject, email_subject) - @patch('zerver.lib.email_mirror.generate_random_token') - def test_message_access_in_emails(self, mock_random_token: MagicMock) -> None: + def test_message_access_in_emails(self) -> None: # Messages sent to a protected history-private stream shouldn't be # accessible/available in emails before subscribing - tokens = self._get_tokens() - mock_random_token.side_effect = tokens - stream_name = "private_stream" self.make_stream(stream_name, invite_only=True, history_public_to_subscribers=False) @@ -801,12 +701,8 @@ class TestMissedMessages(ZulipTestCase): self.assertIn('After subscribing', email_text) self.assertIn('@**King Hamlet**', email_text) - @patch('zerver.lib.email_mirror.generate_random_token') - def test_stream_mentions_multiple_people(self, mock_random_token: MagicMock) -> None: + def test_stream_mentions_multiple_people(self) -> None: """Subject should be stream name and topic as usual.""" - tokens = self._get_tokens() - mock_random_token.side_effect = tokens - hamlet = self.example_user('hamlet') msg_id_1 = self.send_stream_message(self.example_email('iago'), "Denmark", @@ -827,12 +723,8 @@ class TestMissedMessages(ZulipTestCase): email_subject = '#Denmark > test' self.assertEqual(mail.outbox[0].subject, email_subject) - @patch('zerver.lib.email_mirror.generate_random_token') - def test_multiple_stream_messages_different_topics(self, mock_random_token: MagicMock) -> None: + def test_multiple_stream_messages_different_topics(self) -> None: """Should receive separate emails for each topic within a stream.""" - tokens = self._get_tokens() - mock_random_token.side_effect = tokens - hamlet = self.example_user('hamlet') msg_id_1 = self.send_stream_message(self.example_email('othello'), "Denmark",