push_notifications: Disable badge counts.

We include tests for the new implementation to avoid churning the
codebase too much so this can be easily reverted when we are able to
re-enable the feature.
This commit is contained in:
Tim Abbott
2020-07-15 22:05:02 -07:00
parent 5a1243db3c
commit 2f66c825a2
3 changed files with 31 additions and 9 deletions

View File

@@ -629,6 +629,14 @@ def get_apns_alert_subtitle(message: Message) -> str:
return message.sender.full_name + ":" return message.sender.full_name + ":"
def get_apns_badge_count(user_profile: UserProfile, read_messages_ids: Optional[Sequence[int]]=[]) -> int: 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( return UserMessage.objects.filter(
user_profile=user_profile user_profile=user_profile
).extra( ).extra(

View File

@@ -4,7 +4,7 @@ from unittest import mock
from django.utils.timezone import now as timezone_now from django.utils.timezone import now as timezone_now
from zerver.lib.actions import get_client 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.lib.test_classes import ZulipTestCase
from zerver.models import Subscription, UserPresence from zerver.models import Subscription, UserPresence
from zerver.tornado.event_queue import maybe_enqueue_notifications 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: def test_clear_notification_when_mention_removed(self) -> None:
mentioned_user = self.example_user('iago') mentioned_user = self.example_user('iago')
self.assertEqual(get_apns_badge_count(mentioned_user), 0) 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): with mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value=True):
message_id = self._login_and_send_original_stream_message( message_id = self._login_and_send_original_stream_message(
content="@**Iago**", 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( self._get_queued_data_for_message_update(
message_id=message_id, 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(mentioned_user), 0)
self.assertEqual(get_apns_badge_count_future(mentioned_user), 0)
def test_clear_notification_when_group_mention_removed(self) -> None: def test_clear_notification_when_group_mention_removed(self) -> None:
group_mentioned_user = self.example_user('cordelia') group_mentioned_user = self.example_user('cordelia')
self.assertEqual(get_apns_badge_count(group_mentioned_user), 0) 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): with mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value=True):
message_id = self._login_and_send_original_stream_message( message_id = self._login_and_send_original_stream_message(
content="Hello @*hamletcharacters*", 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( self._get_queued_data_for_message_update(
message_id=message_id, 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(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: def test_not_clear_notification_when_mention_removed_but_stream_notified(self) -> None:
mentioned_user = self.example_user('iago') mentioned_user = self.example_user('iago')
@@ -538,17 +544,20 @@ class EditMessageSideEffectsTest(ZulipTestCase):
mentioned_user.save() mentioned_user.save()
self.assertEqual(get_apns_badge_count(mentioned_user), 0) 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): with mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value=True):
message_id = self._login_and_send_original_stream_message( message_id = self._login_and_send_original_stream_message(
content="@**Iago**", 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( self._get_queued_data_for_message_update(
message_id=message_id, message_id=message_id,
content="Removed mention" 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)

View File

@@ -32,6 +32,7 @@ from zerver.lib.push_notifications import (
b64_to_hex, b64_to_hex,
datetime_to_timestamp, datetime_to_timestamp,
get_apns_badge_count, get_apns_badge_count,
get_apns_badge_count_future,
get_apns_client, get_apns_client,
get_display_recipient, get_display_recipient,
get_message_payload_apns, get_message_payload_apns,
@@ -1250,27 +1251,31 @@ class TestAPNs(PushNotificationTest):
@mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value = True) @mock.patch('zerver.lib.push_notifications.push_notifications_enabled', return_value = True)
def test_apns_badge_count(self, mock_push_notifications: mock.MagicMock) -> None: def test_apns_badge_count(self, mock_push_notifications: mock.MagicMock) -> None:
user_profile = self.example_user('othello') user_profile = self.example_user('othello')
# Test APNs badge count for personal messages. # Test APNs badge count for personal messages.
message_ids = [self.send_personal_message(self.sender, message_ids = [self.send_personal_message(self.sender,
user_profile, user_profile,
'Content of message') 'Content of message')
for i in range(3)] 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. # Similarly, test APNs badge count for stream mention.
stream = self.subscribe(user_profile, "Denmark") stream = self.subscribe(user_profile, "Denmark")
message_ids += [self.send_stream_message(self.sender, message_ids += [self.send_stream_message(self.sender,
stream.name, stream.name,
'Hi, @**Othello, the Moor of Venice**') 'Hi, @**Othello, the Moor of Venice**')
for i in range(2)] 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) num_messages = len(message_ids)
# Mark the messages as read and test whether # Mark the messages as read and test whether
# the count decreases correctly. # the count decreases correctly.
for i, message_id in enumerate(message_ids): for i, message_id in enumerate(message_ids):
do_update_message_flags(user_profile, get_client("website"), 'add', 'read', [message_id]) 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() mock_push_notifications.assert_called()
@@ -1324,7 +1329,7 @@ class TestGetAPNsPayload(PushNotificationTest):
'body': message.content, 'body': message.content,
}, },
'sound': 'default', 'sound': 'default',
'badge': 1, 'badge': 0,
'custom': { 'custom': {
'zulip': { 'zulip': {
'message_ids': [message.id], 'message_ids': [message.id],