api: Add support to change name of default stream groups.

This commit is contained in:
Vishnu Ks
2017-11-14 20:06:02 +00:00
committed by Tim Abbott
parent 2af249dd5d
commit d2555e8769
4 changed files with 58 additions and 7 deletions

View File

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

View File

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

View File

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

View File

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