From d2555e87692e893ab89e5225b86808af8225ca03 Mon Sep 17 00:00:00 2001 From: Vishnu Ks Date: Tue, 14 Nov 2017 20:06:02 +0000 Subject: [PATCH] api: Add support to change name of default stream groups. --- zerver/lib/actions.py | 11 +++++++++++ zerver/tests/test_events.py | 6 ++++++ zerver/tests/test_subs.py | 36 +++++++++++++++++++++++++++++++++--- zerver/views/streams.py | 12 ++++++++---- 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index ac7794645a..eaf168845f 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -2972,6 +2972,17 @@ def do_remove_streams_from_default_stream_group(realm: Realm, group: DefaultStre group.save() notify_default_stream_groups(realm) +def do_change_default_stream_group_name(realm: Realm, group: DefaultStreamGroup, new_group_name: Text) -> None: + if group.name == new_group_name: + raise JsonableError(_("This default stream group is already named '%s'") % (new_group_name,)) + + if DefaultStreamGroup.objects.filter(name=new_group_name, realm=realm).exists(): + raise JsonableError(_("Default stream group '%s' already exists") % (new_group_name,)) + + group.name = new_group_name + group.save() + notify_default_stream_groups(realm) + def do_change_default_stream_group_description(realm: Realm, group: DefaultStreamGroup, new_description: Text) -> None: group.description = new_description group.save() diff --git a/zerver/tests/test_events.py b/zerver/tests/test_events.py index 816b9dc843..1569455019 100644 --- a/zerver/tests/test_events.py +++ b/zerver/tests/test_events.py @@ -35,6 +35,7 @@ from zerver.lib.actions import ( do_change_default_events_register_stream, do_change_default_sending_stream, do_change_default_stream_group_description, + do_change_default_stream_group_name, do_change_full_name, do_change_icon_source, do_change_is_admin, @@ -1027,6 +1028,11 @@ class EventsRegisterTest(ZulipTestCase): error = default_stream_groups_checker('events[0]', events[0]) self.assert_on_error(error) + events = self.do_test(lambda: do_change_default_stream_group_name(self.user_profile.realm, + group, "New Group Name")) + error = default_stream_groups_checker('events[0]', events[0]) + self.assert_on_error(error) + events = self.do_test(lambda: do_remove_default_stream_group(self.user_profile.realm, group)) error = default_stream_groups_checker('events[0]', events[0]) self.assert_on_error(error) diff --git a/zerver/tests/test_subs.py b/zerver/tests/test_subs.py index db76f0d09c..0efb2f0e0f 100644 --- a/zerver/tests/test_subs.py +++ b/zerver/tests/test_subs.py @@ -57,6 +57,7 @@ from zerver.lib.actions import ( do_add_streams_to_default_stream_group, do_remove_streams_from_default_stream_group, do_remove_default_stream_group, do_change_default_stream_group_description, + do_change_default_stream_group_name, lookup_default_stream_groups, ) @@ -885,6 +886,14 @@ class DefaultStreamGroupTest(ZulipTestCase): self.assertEqual(default_stream_groups[0].description, new_description) self.assert_length(default_stream_groups, 1) + # Test changing default stream group name + new_group_name = "new group1" + do_change_default_stream_group_name(realm, group, new_group_name) + default_stream_groups = get_default_stream_groups(realm) + self.assert_length(default_stream_groups, 1) + self.assertEqual(default_stream_groups[0].name, new_group_name) + self.assertEqual(list(default_stream_groups[0].streams.all()), remaining_streams) + # Test removing default stream group do_remove_default_stream_group(realm, group) default_stream_groups = get_default_stream_groups(realm) @@ -892,8 +901,8 @@ class DefaultStreamGroupTest(ZulipTestCase): # Test creating a default stream group which contains a default stream do_add_default_stream(remaining_streams[0]) - with self.assertRaisesRegex(JsonableError, "'stream1' is a default stream and cannot be added to 'group1'"): - do_create_default_stream_group(realm, group_name, "This is group1", remaining_streams) + with self.assertRaisesRegex(JsonableError, "'stream1' is a default stream and cannot be added to 'new group1'"): + do_create_default_stream_group(realm, new_group_name, "This is group1", remaining_streams) def test_api_calls(self) -> None: self.login(self.example_email("hamlet")) @@ -992,7 +1001,7 @@ class DefaultStreamGroupTest(ZulipTestCase): result = self.client_patch("/json/default_stream_groups/{}".format(group_id), {"group_name": group_name, "op": "change"}) - self.assert_json_error(result, 'You must pass "new_description".') + self.assert_json_error(result, 'You must pass "new_description" or "new_group_name".') result = self.client_patch("/json/default_stream_groups/12345", {"op": "change", "new_description": ujson.dumps(new_description)}) @@ -1008,6 +1017,27 @@ class DefaultStreamGroupTest(ZulipTestCase): self.assertEqual(default_stream_groups[0].name, group_name) self.assertEqual(default_stream_groups[0].description, new_description) + # Test changing name of default stream group + new_group_name = "new group1" + do_create_default_stream_group(realm, "group2", "", []) + result = self.client_patch("/json/default_stream_groups/{}".format(group_id), + {"op": "change", "new_group_name": ujson.dumps("group2")}) + self.assert_json_error(result, "Default stream group 'group2' already exists") + new_group = lookup_default_stream_groups(["group2"], realm)[0] + do_remove_default_stream_group(realm, new_group) + + result = self.client_patch("/json/default_stream_groups/{}".format(group_id), + {"op": "change", "new_group_name": ujson.dumps(group_name)}) + self.assert_json_error(result, "This default stream group is already named 'group1'") + + result = self.client_patch("/json/default_stream_groups/{}".format(group_id), + {"op": "change", "new_group_name": ujson.dumps(new_group_name)}) + self.assert_json_success(result) + default_stream_groups = get_default_stream_groups(realm) + self.assert_length(default_stream_groups, 1) + self.assertEqual(default_stream_groups[0].name, new_group_name) + self.assertEqual(default_stream_groups[0].description, new_description) + # Test deleting a default stream group result = self.client_delete('/json/default_stream_groups/{}'.format(group_id)) self.assert_json_success(result) diff --git a/zerver/views/streams.py b/zerver/views/streams.py index 0e28057d2a..798bc981e2 100644 --- a/zerver/views/streams.py +++ b/zerver/views/streams.py @@ -20,7 +20,7 @@ from zerver.lib.actions import bulk_remove_subscriptions, \ do_remove_default_stream, get_topic_history_for_stream, \ do_create_default_stream_group, do_add_streams_to_default_stream_group, \ do_remove_streams_from_default_stream_group, do_remove_default_stream_group, \ - do_change_default_stream_group_description, \ + do_change_default_stream_group_description, do_change_default_stream_group_name, \ prep_stream_welcome_message from zerver.lib.response import json_success, json_error, json_response from zerver.lib.streams import access_stream_by_id, access_stream_by_name, \ @@ -90,12 +90,16 @@ def create_default_stream_group(request: HttpRequest, user_profile: UserProfile, @require_realm_admin @has_request_variables def update_default_stream_group_info(request: HttpRequest, user_profile: UserProfile, group_id: int, + new_group_name: Text=REQ(validator=check_string, default=None), new_description: Text=REQ(validator=check_string, default=None)) -> None: - if not new_description: - return json_error(_('You must pass "new_description".')) + if not new_group_name and not new_description: + return json_error(_('You must pass "new_description" or "new_group_name".')) group = access_default_stream_group_by_id(user_profile.realm, group_id,) - do_change_default_stream_group_description(user_profile.realm, group, new_description) + if new_group_name is not None: + do_change_default_stream_group_name(user_profile.realm, group, new_group_name) + if new_description is not None: + do_change_default_stream_group_description(user_profile.realm, group, new_description) return json_success() @require_realm_admin