mirror of https://github.com/zulip/zulip.git
zerver: Handle `update_global_notifications` in `apply_events`
Fixes #2358
This commit is contained in:
parent
23652f8025
commit
d28f1ddfb4
|
@ -2229,14 +2229,14 @@ def do_change_enable_offline_push_notifications(user_profile, offline_push_notif
|
||||||
log_event(event)
|
log_event(event)
|
||||||
send_event(event, [user_profile.id])
|
send_event(event, [user_profile.id])
|
||||||
|
|
||||||
def do_change_enable_online_push_notifications(user_profile, online_push_notifications, log=True):
|
def do_change_enable_online_push_notifications(user_profile, enable_online_push_notifications, log=True):
|
||||||
# type: (UserProfile, bool, bool) -> None
|
# type: (UserProfile, bool, bool) -> None
|
||||||
user_profile.enable_online_push_notifications = online_push_notifications
|
user_profile.enable_online_push_notifications = enable_online_push_notifications
|
||||||
user_profile.save(update_fields=["enable_online_push_notifications"])
|
user_profile.save(update_fields=["enable_online_push_notifications"])
|
||||||
event = {'type': 'update_global_notifications',
|
event = {'type': 'update_global_notifications',
|
||||||
'user': user_profile.email,
|
'user': user_profile.email,
|
||||||
'notification_name': 'online_push_notifications',
|
'notification_name': 'enable_online_push_notifications',
|
||||||
'setting': online_push_notifications}
|
'setting': enable_online_push_notifications}
|
||||||
if log:
|
if log:
|
||||||
log_event(event)
|
log_event(event)
|
||||||
send_event(event, [user_profile.id])
|
send_event(event, [user_profile.id])
|
||||||
|
@ -3089,6 +3089,16 @@ def fetch_initial_state_data(user_profile, event_types, queue_id):
|
||||||
|
|
||||||
state['default_language'] = default_language
|
state['default_language'] = default_language
|
||||||
|
|
||||||
|
if want('update_global_notifications'):
|
||||||
|
state['enable_stream_desktop_notifications'] = user_profile.enable_stream_desktop_notifications
|
||||||
|
state['enable_stream_sounds'] = user_profile.enable_stream_sounds
|
||||||
|
state['enable_desktop_notifications'] = user_profile.enable_desktop_notifications
|
||||||
|
state['enable_sounds'] = user_profile.enable_sounds
|
||||||
|
state['enable_offline_email_notifications'] = user_profile.enable_offline_email_notifications
|
||||||
|
state['enable_offline_push_notifications'] = user_profile.enable_offline_push_notifications
|
||||||
|
state['enable_online_push_notifications'] = user_profile.enable_online_push_notifications
|
||||||
|
state['enable_digest_emails'] = user_profile.enable_digest_emails
|
||||||
|
|
||||||
return state
|
return state
|
||||||
|
|
||||||
def apply_events(state, events, user_profile):
|
def apply_events(state, events, user_profile):
|
||||||
|
@ -3265,6 +3275,23 @@ def apply_events(state, events, user_profile):
|
||||||
state['twenty_four_hour_time'] = event["setting"]
|
state['twenty_four_hour_time'] = event["setting"]
|
||||||
if event['setting_name'] == 'left_side_userlist':
|
if event['setting_name'] == 'left_side_userlist':
|
||||||
state['left_side_userlist'] = event["setting"]
|
state['left_side_userlist'] = event["setting"]
|
||||||
|
elif event['type'] == "update_global_notifications":
|
||||||
|
if event['notification_name'] == "enable_stream_desktop_notifications":
|
||||||
|
state['enable_stream_desktop_notifications'] = event['setting']
|
||||||
|
elif event['notification_name'] == "enable_stream_sounds":
|
||||||
|
state['enable_stream_sounds'] = event['setting']
|
||||||
|
elif event['notification_name'] == "enable_desktop_notifications":
|
||||||
|
state['enable_desktop_notifications'] = event['setting']
|
||||||
|
elif event['notification_name'] == "enable_sounds":
|
||||||
|
state['enable_sounds'] = event['setting']
|
||||||
|
elif event['notification_name'] == "enable_offline_email_notifications":
|
||||||
|
state['enable_offline_email_notifications'] = event['setting']
|
||||||
|
elif event['notification_name'] == "enable_offline_push_notifications":
|
||||||
|
state['enable_offline_push_notifications'] = event['setting']
|
||||||
|
elif event['notification_name'] == "enable_online_push_notifications":
|
||||||
|
state['enable_online_push_notifications'] = event['setting']
|
||||||
|
elif event['notification_name'] == "enable_digest_emails":
|
||||||
|
state['enable_digest_emails'] = event['setting']
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unexpected event type %s" % (event['type'],))
|
raise ValueError("Unexpected event type %s" % (event['type'],))
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,14 @@ from zerver.lib.actions import (
|
||||||
do_update_pointer,
|
do_update_pointer,
|
||||||
do_change_twenty_four_hour_time,
|
do_change_twenty_four_hour_time,
|
||||||
do_change_left_side_userlist,
|
do_change_left_side_userlist,
|
||||||
|
do_change_enable_stream_desktop_notifications,
|
||||||
|
do_change_enable_stream_sounds,
|
||||||
|
do_change_enable_desktop_notifications,
|
||||||
|
do_change_enable_sounds,
|
||||||
|
do_change_enable_offline_email_notifications,
|
||||||
|
do_change_enable_offline_push_notifications,
|
||||||
|
do_change_enable_online_push_notifications,
|
||||||
|
do_change_enable_digest_emails,
|
||||||
fetch_initial_state_data,
|
fetch_initial_state_data,
|
||||||
get_subscription
|
get_subscription
|
||||||
)
|
)
|
||||||
|
@ -641,6 +649,118 @@ class EventsRegisterTest(ZulipTestCase):
|
||||||
error = schema_checker('events[0]', events[0])
|
error = schema_checker('events[0]', events[0])
|
||||||
self.assert_on_error(error)
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_stream_desktop_notifications(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_stream_desktop_notifications')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_stream_desktop_notifications(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_stream_sounds(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_stream_sounds')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_stream_sounds(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_desktop_notifications(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_desktop_notifications')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_desktop_notifications(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_sounds(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_sounds')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_sounds(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_offline_email_notifications(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_offline_email_notifications')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_offline_email_notifications(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_offline_push_notifications(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_offline_push_notifications')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_offline_push_notifications(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_online_push_notifications(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_online_push_notifications')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_online_push_notifications(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_enable_digest_emails(self):
|
||||||
|
# type: () -> None
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_global_notifications')),
|
||||||
|
('notification_name', equals('enable_digest_emails')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_enable_digest_emails(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
def test_realm_emoji_events(self):
|
def test_realm_emoji_events(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
schema_checker = check_dict([
|
schema_checker = check_dict([
|
||||||
|
|
Loading…
Reference in New Issue