settings: Toggle dense mode if font and line height values are changed.

This commit is contained in:
Sahil Batra 2024-07-03 19:13:52 +05:30 committed by Tim Abbott
parent b6905777d0
commit 17541ddacb
4 changed files with 83 additions and 1 deletions

View File

@ -479,6 +479,21 @@ def do_set_realm_user_default_setting(
},
)
if name in {"web_font_size_px", "web_line_height_percent"}:
if (
realm_user_default.web_font_size_px != RealmUserDefault.WEB_FONT_SIZE_PX_LEGACY
or realm_user_default.web_line_height_percent
!= RealmUserDefault.WEB_LINE_HEIGHT_PERCENT_LEGACY
):
expected_dense_mode = False
else:
expected_dense_mode = True
if realm_user_default.dense_mode != expected_dense_mode:
do_set_realm_user_default_setting(
realm_user_default, "dense_mode", expected_dense_mode, acting_user=acting_user
)
event = dict(
type="realm_user_settings_defaults",
op="update",

View File

@ -418,7 +418,7 @@ def update_scheduled_email_notifications_time(
)
@transaction.atomic(durable=True)
@transaction.atomic(savepoint=False)
def do_change_user_setting(
user_profile: UserProfile,
setting_name: str,
@ -474,6 +474,20 @@ def do_change_user_setting(
send_event_on_commit(user_profile.realm, event, [user_profile.id])
if setting_name in {"web_font_size_px", "web_line_height_percent"}:
if (
user_profile.web_font_size_px != UserProfile.WEB_FONT_SIZE_PX_LEGACY
or user_profile.web_line_height_percent != UserProfile.WEB_LINE_HEIGHT_PERCENT_LEGACY
):
expected_dense_mode = False
else:
expected_dense_mode = True
if user_profile.dense_mode != expected_dense_mode:
do_change_user_setting(
user_profile, "dense_mode", expected_dense_mode, acting_user=acting_user
)
if setting_name in UserProfile.notification_settings_legacy:
# This legacy event format is for backwards-compatibility with
# clients that don't support the new user_settings event type.

View File

@ -1989,6 +1989,33 @@ class RealmAPITest(ZulipTestCase):
continue
self.do_test_realm_default_setting_update_api(prop)
def test_update_default_information_density_settings(self) -> None:
realm = get_realm("zulip")
realm_user_default = RealmUserDefault.objects.get(realm=realm)
self.assertEqual(realm_user_default.dense_mode, True)
self.login("iago")
data = {"web_font_size_px": 16}
result = self.client_patch("/json/realm/user_settings_defaults", data)
self.assert_json_success(result)
realm_user_default = RealmUserDefault.objects.get(realm=realm)
self.assertEqual(realm_user_default.web_font_size_px, 16)
self.assertEqual(realm_user_default.dense_mode, False)
data = {"web_font_size_px": 14}
result = self.client_patch("/json/realm/user_settings_defaults", data)
self.assert_json_success(result)
realm_user_default = RealmUserDefault.objects.get(realm=realm)
self.assertEqual(realm_user_default.web_font_size_px, 14)
self.assertEqual(realm_user_default.dense_mode, True)
data = {"web_line_height_percent": 140}
result = self.client_patch("/json/realm/user_settings_defaults", data)
self.assert_json_success(result)
realm_user_default = RealmUserDefault.objects.get(realm=realm)
self.assertEqual(realm_user_default.web_line_height_percent, 140)
self.assertEqual(realm_user_default.dense_mode, False)
def test_invalid_default_notification_sound_value(self) -> None:
result = self.client_patch(
"/json/realm/user_settings_defaults", {"notification_sound": "invalid"}

View File

@ -501,6 +501,32 @@ class ChangeSettingsTest(ZulipTestCase):
hamlet = self.example_user("hamlet")
self.assertEqual(hamlet.enable_stream_desktop_notifications, True)
def test_changing_information_density_settings(self) -> None:
hamlet = self.example_user("hamlet")
self.assertEqual(hamlet.dense_mode, True)
self.login("hamlet")
data = {"web_font_size_px": 16}
result = self.client_patch("/json/settings", data)
self.assert_json_success(result)
hamlet = self.example_user("hamlet")
self.assertEqual(hamlet.web_font_size_px, 16)
self.assertEqual(hamlet.dense_mode, False)
data = {"web_font_size_px": 14}
result = self.client_patch("/json/settings", data)
self.assert_json_success(result)
hamlet = self.example_user("hamlet")
self.assertEqual(hamlet.web_font_size_px, 14)
self.assertEqual(hamlet.dense_mode, True)
data = {"web_line_height_percent": 140}
result = self.client_patch("/json/settings", data)
self.assert_json_success(result)
hamlet = self.example_user("hamlet")
self.assertEqual(hamlet.web_line_height_percent, 140)
self.assertEqual(hamlet.dense_mode, False)
class UserChangesTest(ZulipTestCase):
def test_update_api_key(self) -> None: