diff --git a/zerver/lib/push_notifications.py b/zerver/lib/push_notifications.py index e7ad5ef50a..3cfee9b10d 100644 --- a/zerver/lib/push_notifications.py +++ b/zerver/lib/push_notifications.py @@ -629,6 +629,14 @@ def get_apns_alert_subtitle(message: Message) -> str: return message.sender.full_name + ":" def get_apns_badge_count(user_profile: UserProfile, read_messages_ids: Optional[Sequence[int]]=[]) -> int: + # NOTE: We have temporarily set get_apns_badge_count to always + # return 0 until we can debug a likely mobile app side issue with + # handling notifications while the app is open. + return 0 + +def get_apns_badge_count_future(user_profile: UserProfile, read_messages_ids: Optional[Sequence[int]]=[]) -> int: + # Future implementation of get_apns_badge_count; unused but + # we expect to use this once we resolve client-side bugs. return UserMessage.objects.filter( user_profile=user_profile ).extra( diff --git a/zerver/tests/test_message_edit_notifications.py b/zerver/tests/test_message_edit_notifications.py index bcd8433318..25ce6c1a29 100644 --- a/zerver/tests/test_message_edit_notifications.py +++ b/zerver/tests/test_message_edit_notifications.py @@ -4,7 +4,7 @@ from unittest import mock from django.utils.timezone import now as timezone_now from zerver.lib.actions import get_client -from zerver.lib.push_notifications import get_apns_badge_count +from zerver.lib.push_notifications import get_apns_badge_count, get_apns_badge_count_future from zerver.lib.test_classes import ZulipTestCase from zerver.models import Subscription, UserPresence from zerver.tornado.event_queue import maybe_enqueue_notifications @@ -498,13 +498,15 @@ class EditMessageSideEffectsTest(ZulipTestCase): def test_clear_notification_when_mention_removed(self) -> None: mentioned_user = self.example_user('iago') self.assertEqual(get_apns_badge_count(mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(mentioned_user), 0) with mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value=True): message_id = self._login_and_send_original_stream_message( content="@**Iago**", ) - self.assertEqual(get_apns_badge_count(mentioned_user), 1) + self.assertEqual(get_apns_badge_count(mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(mentioned_user), 1) self._get_queued_data_for_message_update( message_id=message_id, @@ -512,17 +514,20 @@ class EditMessageSideEffectsTest(ZulipTestCase): ) self.assertEqual(get_apns_badge_count(mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(mentioned_user), 0) def test_clear_notification_when_group_mention_removed(self) -> None: group_mentioned_user = self.example_user('cordelia') self.assertEqual(get_apns_badge_count(group_mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(group_mentioned_user), 0) with mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value=True): message_id = self._login_and_send_original_stream_message( content="Hello @*hamletcharacters*", ) - self.assertEqual(get_apns_badge_count(group_mentioned_user), 1) + self.assertEqual(get_apns_badge_count(group_mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(group_mentioned_user), 1) self._get_queued_data_for_message_update( message_id=message_id, @@ -531,6 +536,7 @@ class EditMessageSideEffectsTest(ZulipTestCase): ) self.assertEqual(get_apns_badge_count(group_mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(group_mentioned_user), 0) def test_not_clear_notification_when_mention_removed_but_stream_notified(self) -> None: mentioned_user = self.example_user('iago') @@ -538,17 +544,20 @@ class EditMessageSideEffectsTest(ZulipTestCase): mentioned_user.save() self.assertEqual(get_apns_badge_count(mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(mentioned_user), 0) with mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value=True): message_id = self._login_and_send_original_stream_message( content="@**Iago**", ) - self.assertEqual(get_apns_badge_count(mentioned_user), 1) + self.assertEqual(get_apns_badge_count(mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(mentioned_user), 1) self._get_queued_data_for_message_update( message_id=message_id, content="Removed mention" ) - self.assertEqual(get_apns_badge_count(mentioned_user), 1) + self.assertEqual(get_apns_badge_count(mentioned_user), 0) + self.assertEqual(get_apns_badge_count_future(mentioned_user), 1) diff --git a/zerver/tests/test_push_notifications.py b/zerver/tests/test_push_notifications.py index 6fdf9266ca..5ad43a065a 100644 --- a/zerver/tests/test_push_notifications.py +++ b/zerver/tests/test_push_notifications.py @@ -32,6 +32,7 @@ from zerver.lib.push_notifications import ( b64_to_hex, datetime_to_timestamp, get_apns_badge_count, + get_apns_badge_count_future, get_apns_client, get_display_recipient, get_message_payload_apns, @@ -1250,27 +1251,31 @@ class TestAPNs(PushNotificationTest): @mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value = True) def test_apns_badge_count(self, mock_push_notifications: mock.MagicMock) -> None: + user_profile = self.example_user('othello') # Test APNs badge count for personal messages. message_ids = [self.send_personal_message(self.sender, user_profile, 'Content of message') for i in range(3)] - self.assertEqual(get_apns_badge_count(user_profile), 3) + self.assertEqual(get_apns_badge_count(user_profile), 0) + self.assertEqual(get_apns_badge_count_future(user_profile), 3) # Similarly, test APNs badge count for stream mention. stream = self.subscribe(user_profile, "Denmark") message_ids += [self.send_stream_message(self.sender, stream.name, 'Hi, @**Othello, the Moor of Venice**') for i in range(2)] - self.assertEqual(get_apns_badge_count(user_profile), 5) + self.assertEqual(get_apns_badge_count(user_profile), 0) + self.assertEqual(get_apns_badge_count_future(user_profile), 5) num_messages = len(message_ids) # Mark the messages as read and test whether # the count decreases correctly. for i, message_id in enumerate(message_ids): do_update_message_flags(user_profile, get_client("website"), 'add', 'read', [message_id]) - self.assertEqual(get_apns_badge_count(user_profile), num_messages - i - 1) + self.assertEqual(get_apns_badge_count(user_profile), 0) + self.assertEqual(get_apns_badge_count_future(user_profile), num_messages - i - 1) mock_push_notifications.assert_called() @@ -1324,7 +1329,7 @@ class TestGetAPNsPayload(PushNotificationTest): 'body': message.content, }, 'sound': 'default', - 'badge': 1, + 'badge': 0, 'custom': { 'zulip': { 'message_ids': [message.id],