From 693a9a5e705e561333be7d077b99a63f4fe43f1c Mon Sep 17 00:00:00 2001 From: Greg Price Date: Fri, 16 Feb 2018 14:18:47 -0800 Subject: [PATCH] push notifs: For group PMs, identify the users in the group. --- zerver/lib/push_notifications.py | 9 ++++++--- zerver/tests/test_push_notifications.py | 19 +++++++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/zerver/lib/push_notifications.py b/zerver/lib/push_notifications.py index 4b430d0bf8..1376019f32 100644 --- a/zerver/lib/push_notifications.py +++ b/zerver/lib/push_notifications.py @@ -26,7 +26,7 @@ import ujson from zerver.decorator import statsd_increment from zerver.lib.avatar import absolute_avatar_url from zerver.lib.exceptions import ErrorCode, JsonableError -from zerver.lib.message import access_message +from zerver.lib.message import access_message, huddle_users from zerver.lib.queue import retry_event from zerver.lib.timestamp import datetime_to_timestamp, timestamp_to_datetime from zerver.lib.utils import generate_random_token @@ -479,11 +479,14 @@ def get_common_payload(message: Message) -> Dict[str, Any]: data['sender_id'] = message.sender.id data['sender_email'] = message.sender.email - if message.is_stream_message(): + if message.recipient.type == Recipient.STREAM: data['recipient_type'] = "stream" data['stream'] = get_display_recipient(message.recipient) data['topic'] = message.subject - else: + elif message.recipient.type == Recipient.HUDDLE: + data['recipient_type'] = "private" + data['pm_users'] = huddle_users(message.recipient.id) + else: # Recipient.PERSONAL data['recipient_type'] = "private" return data diff --git a/zerver/tests/test_push_notifications.py b/zerver/tests/test_push_notifications.py index 0e9f4b585f..c525651de9 100644 --- a/zerver/tests/test_push_notifications.py +++ b/zerver/tests/test_push_notifications.py @@ -28,6 +28,7 @@ from zerver.models import ( get_realm, Recipient, Stream, + Subscription, ) from zerver.lib.soft_deactivation import do_soft_deactivate_users from zerver.lib import push_notifications as apn @@ -679,7 +680,10 @@ class TestGetAlertFromMessage(PushNotificationTest): class TestGetAPNsPayload(PushNotificationTest): def test_get_apns_payload(self) -> None: - message = self.get_message(Recipient.HUDDLE) + message_id = self.send_huddle_message( + self.sender.email, + [self.example_email('othello'), self.example_email('cordelia')]) + message = Message.objects.get(id=message_id) message.trigger = 'private_message' payload = apn.get_apns_payload(message) expected = { @@ -692,6 +696,10 @@ class TestGetAPNsPayload(PushNotificationTest): 'zulip': { 'message_ids': [message.id], 'recipient_type': 'private', + 'pm_users': ','.join( + str(s.user_profile_id) + for s in Subscription.objects.filter( + recipient=message.recipient)), 'sender_email': 'hamlet@zulip.com', 'sender_id': 4, 'server': settings.EXTERNAL_HOST, @@ -731,7 +739,10 @@ class TestGetAPNsPayload(PushNotificationTest): @override_settings(PUSH_NOTIFICATION_REDACT_CONTENT = True) def test_get_apns_payload_redacted_content(self) -> None: - message = self.get_message(Recipient.HUDDLE) + message_id = self.send_huddle_message( + self.sender.email, + [self.example_email('othello'), self.example_email('cordelia')]) + message = Message.objects.get(id=message_id) message.trigger = 'private_message' payload = apn.get_apns_payload(message) expected = { @@ -744,6 +755,10 @@ class TestGetAPNsPayload(PushNotificationTest): 'zulip': { 'message_ids': [message.id], 'recipient_type': 'private', + 'pm_users': ','.join( + str(s.user_profile_id) + for s in Subscription.objects.filter( + recipient=message.recipient)), 'sender_email': self.example_email("hamlet"), 'sender_id': 4, 'server': settings.EXTERNAL_HOST,