Use modern huddle URLs in digest emails.

This commit is contained in:
Steve Howell
2018-11-12 14:51:37 +00:00
committed by Tim Abbott
parent e79e0018f7
commit bb959acbaf
3 changed files with 20 additions and 8 deletions

View File

@@ -11,7 +11,7 @@ from zerver.decorator import statsd_increment
from zerver.lib.message import bulk_access_messages from zerver.lib.message import bulk_access_messages
from zerver.lib.queue import queue_json_publish from zerver.lib.queue import queue_json_publish
from zerver.lib.send_email import send_future_email, FromAddress from zerver.lib.send_email import send_future_email, FromAddress
from zerver.lib.url_encoding import personal_narrow_url, pm_narrow_url, \ from zerver.lib.url_encoding import personal_narrow_url, huddle_narrow_url, \
stream_narrow_url, topic_narrow_url stream_narrow_url, topic_narrow_url
from zerver.models import ( from zerver.models import (
Recipient, Recipient,
@@ -178,10 +178,15 @@ def build_message_list(user_profile: UserProfile, messages: List[Message]) -> Li
disp_recipient = get_display_recipient(message.recipient) disp_recipient = get_display_recipient(message.recipient)
assert not isinstance(disp_recipient, str) assert not isinstance(disp_recipient, str)
other_recipients = [r['full_name'] for r in disp_recipient other_recipients = [r['full_name'] for r in disp_recipient
if r['email'] != user_profile.email] if r['id'] != user_profile.id]
header = "You and %s" % (", ".join(other_recipients),) header = "You and %s" % (", ".join(other_recipients),)
html_link = pm_narrow_url(user_profile.realm, [r["email"] for r in disp_recipient other_user_ids = [r['id'] for r in disp_recipient
if r["email"] != user_profile.email]) if r['id'] != user_profile.id]
html_link = huddle_narrow_url(
realm=user_profile.realm,
other_user_ids=other_user_ids,
)
header_html = "<a style='color: #ffffff;' href='%s'>%s</a>" % (html_link, header) header_html = "<a style='color: #ffffff;' href='%s'>%s</a>" % (html_link, header)
else: else:
stream = Stream.objects.only('id', 'name').get(id=message.recipient.type_id) stream = Stream.objects.only('id', 'name').get(id=message.recipient.type_id)

View File

@@ -21,10 +21,10 @@ def personal_narrow_url(realm: Realm, sender: UserProfile) -> str:
pm_slug = str(sender.id) + '-' + hash_util_encode(email_user) pm_slug = str(sender.id) + '-' + hash_util_encode(email_user)
return base_url + pm_slug return base_url + pm_slug
def pm_narrow_url(realm: Realm, participants: List[str]) -> str: def huddle_narrow_url(realm: Realm, other_user_ids: List[int]) -> str:
participants.sort() pm_slug = ','.join(str(user_id) for user_id in sorted(other_user_ids)) + '-group'
base_url = "%s/#narrow/pm-with/" % (realm.uri,) base_url = "%s/#narrow/pm-with/" % (realm.uri,)
return base_url + hash_util_encode(",".join(participants)) return base_url + pm_slug
def stream_narrow_url(realm: Realm, stream: Stream) -> str: def stream_narrow_url(realm: Realm, stream: Stream) -> str:
base_url = "%s/#narrow/stream/" % (realm.uri,) base_url = "%s/#narrow/stream/" % (realm.uri,)

View File

@@ -74,7 +74,14 @@ class TestDigestEmailMessages(ZulipTestCase):
kwargs = mock_send_future_email.call_args[1] kwargs = mock_send_future_email.call_args[1]
self.assertEqual(kwargs['to_user_id'], user_profile.id) self.assertEqual(kwargs['to_user_id'], user_profile.id)
html = kwargs['context']['unread_pms'][0]['header']['html'] html = kwargs['context']['unread_pms'][0]['header']['html']
self.assertIn("'http://zulip.testserver/#narrow/pm-with/cordelia.40zulip.2Ecom.2Chamlet.40zulip.2Ecom'", html)
other_user_ids = sorted([
self.example_user('cordelia').id,
self.example_user('hamlet').id,
])
slug = ','.join(str(user_id) for user_id in other_user_ids) + '-group'
expected_url = "'http://zulip.testserver/#narrow/pm-with/" + slug + "'"
self.assertIn(expected_url, html)
@mock.patch('zerver.lib.digest.queue_digest_recipient') @mock.patch('zerver.lib.digest.queue_digest_recipient')
@mock.patch('zerver.lib.digest.timezone_now') @mock.patch('zerver.lib.digest.timezone_now')