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 + ":"
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(

View File

@@ -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)

View File

@@ -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],