backend: Allow to change UserProfile's emojiset field via api.

This commit is contained in:
Harshit Bansal
2017-04-02 19:05:33 +00:00
committed by Tim Abbott
parent fb3fda031d
commit 07081196f4
6 changed files with 44 additions and 1 deletions

View File

@@ -151,6 +151,7 @@ def fetch_initial_state_data(user_profile, event_types, queue_id,
state['twenty_four_hour_time'] = user_profile.twenty_four_hour_time
state['left_side_userlist'] = user_profile.left_side_userlist
state['emoji_alt_code'] = user_profile.emoji_alt_code
state['emojiset'] = user_profile.emojiset
state['timezone'] = user_profile.timezone
state['default_language'] = user_profile.default_language
@@ -388,6 +389,8 @@ def apply_event(state, event, user_profile, include_subscribers):
state['left_side_userlist'] = event["setting"]
if event['setting_name'] == 'emoji_alt_code':
state['emoji_alt_code'] = event["setting"]
if event['setting_name'] == 'emojiset':
state['emojiset'] = event["setting"]
if event['setting_name'] == 'default_language':
state['default_language'] = event["setting"]
if event['setting_name'] == 'timezone':

View File

@@ -957,6 +957,10 @@ class EventsRegisterTest(ZulipTestCase):
# type: () -> None
self.do_set_user_display_settings_test("emoji_alt_code", [True, False])
def test_change_emojiset(self):
# type: () -> None
self.do_set_user_display_settings_test("emojiset", [u'apple', u'twitter'])
def test_change_default_language(self):
# type: () -> None
self.do_set_user_display_settings_test("default_language", [u'de', u'es', u'en'])

View File

@@ -58,6 +58,8 @@ class HomeTest(ZulipTestCase):
"domains",
"email",
"emoji_alt_code",
"emojiset",
"emojiset_choices",
"enable_digest_emails",
"enable_offline_email_notifications",
"enable_offline_push_notifications",

View File

@@ -239,6 +239,29 @@ class ChangeSettingsTest(ZulipTestCase):
user_profile = get_user_profile_by_email(email)
self.assertNotEqual(user_profile.timezone, invalid_timezone)
def test_change_emojiset(self):
# type: () -> None
"""
Test changing the emojiset.
"""
email = "hamlet@zulip.com"
self.login(email)
emojiset = 'apple'
data = dict(emojiset=ujson.dumps(emojiset))
result = self.client_patch("/json/settings/display", data)
self.assert_json_success(result)
user_profile = get_user_profile_by_email(email)
self.assertEqual(user_profile.emojiset, emojiset)
# Test to make sure invalid emojisets are not accepted
# and saved in the db.
invalid_emojiset = "invalid_emojiset"
data = dict(emojiset=ujson.dumps(invalid_emojiset))
result = self.client_patch("/json/settings/display", data)
self.assert_json_error(result, "Invalid emojiset '%s'" % (invalid_emojiset,))
user_profile = get_user_profile_by_email(email)
self.assertNotEqual(user_profile.emojiset, invalid_emojiset)
class UserChangesTest(ZulipTestCase):
def test_update_api_key(self):
# type: () -> None

View File

@@ -234,6 +234,8 @@ def home_real(request):
avatar_url_medium = avatar_url(user_profile, medium=True),
avatar_source = user_profile.avatar_source,
timezone = user_profile.timezone,
emojiset = user_profile.emojiset,
emojiset_choices = user_profile.emojiset_choices(),
# Stream message notification settings:
stream_desktop_notifications_enabled = user_profile.enable_stream_desktop_notifications,

View File

@@ -161,8 +161,9 @@ def update_display_settings_backend(request, user_profile,
default_language=REQ(validator=check_string, default=None),
left_side_userlist=REQ(validator=check_bool, default=None),
emoji_alt_code=REQ(validator=check_bool, default=None),
emojiset=REQ(validator=check_string, default=None),
timezone=REQ(validator=check_string, default=None)):
# type: (HttpRequest, UserProfile, Optional[bool], Optional[str], Optional[bool], Optional[bool], Optional[Text]) -> HttpResponse
# type: (HttpRequest, UserProfile, Optional[bool], Optional[str], Optional[bool], Optional[bool], Optional[Text], Optional[Text]) -> HttpResponse
if (default_language is not None and
default_language not in get_available_language_codes()):
raise JsonableError(_("Invalid language '%s'" % (default_language,)))
@@ -171,6 +172,10 @@ def update_display_settings_backend(request, user_profile,
timezone not in get_all_timezones()):
raise JsonableError(_("Invalid timezone '%s'" % (timezone,)))
if (emojiset is not None and
emojiset not in UserProfile.emojiset_choices()):
raise JsonableError(_("Invalid emojiset '%s'" % (emojiset,)))
result = {} # type: Dict[str, Any]
if (default_language is not None and
user_profile.default_language != default_language):
@@ -192,6 +197,10 @@ def update_display_settings_backend(request, user_profile,
do_set_user_display_setting(user_profile, "emoji_alt_code", emoji_alt_code)
result['emoji_alt_code'] = emoji_alt_code
elif (emojiset is not None and user_profile.emojiset != emojiset):
do_set_user_display_setting(user_profile, "emojiset", emojiset)
result['emojiset'] = emojiset
elif (timezone is not None and
user_profile.timezone != timezone):
do_set_user_display_setting(user_profile, "timezone", timezone)