From 8776cc0e354c161f95277e59a0bb1d633b36c135 Mon Sep 17 00:00:00 2001 From: Steve Howell Date: Thu, 15 Sep 2016 07:22:09 -0700 Subject: [PATCH] Add create_streams_if_needed(). --- zerver/lib/actions.py | 15 +++++++++++++++ zerver/tests/test_subs.py | 28 +++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 7361622985..854ebd3279 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -805,6 +805,21 @@ def create_stream_if_needed(realm, stream_name, invite_only=False): send_event(event, active_user_ids(realm)) return stream, created +def create_streams_if_needed(realm, stream_names, invite_only): + # type: (Realm, List[text_type], bool) -> Tuple[List[Stream], List[Stream]] + added_streams = [] # type: List[Stream] + existing_streams = [] # type: List[Stream] + for stream_name in stream_names: + stream, created = create_stream_if_needed(realm, + stream_name, + invite_only=invite_only) + if created: + added_streams.append(stream) + else: + existing_streams.append(stream) + + return added_streams, existing_streams + def recipient_for_emails(emails, not_forged_mirror_message, user_profile, sender): # type: (Iterable[text_type], bool, UserProfile, UserProfile) -> Recipient diff --git a/zerver/tests/test_subs.py b/zerver/tests/test_subs.py index 60ed17ffd9..dd7723e115 100644 --- a/zerver/tests/test_subs.py +++ b/zerver/tests/test_subs.py @@ -35,7 +35,8 @@ from zerver.lib.actions import ( do_create_realm, do_remove_default_stream, do_set_realm_create_stream_by_admins_only, gather_subscriptions_helper, gather_subscriptions, get_default_streams_for_realm, get_realm, get_stream, - get_user_profile_by_email, set_default_streams, get_subscription + get_user_profile_by_email, set_default_streams, get_subscription, + create_streams_if_needed ) from zerver.views.streams import ( @@ -50,6 +51,31 @@ import six from six import text_type from six.moves import range, urllib +class TestCreateStreams(ZulipTestCase): + def test_creating_streams(self): + # type: () -> None + stream_names = [u'new1', u'new2', u'new3'] + realm = get_realm('zulip.com') + + new_streams, existing_streams = create_streams_if_needed( + realm, + stream_names, + invite_only=True) + self.assertEqual(len(new_streams), 3) + self.assertEqual(len(existing_streams), 0) + + actual_stream_names = {stream.name for stream in new_streams} + self.assertEqual(actual_stream_names, set(stream_names)) + + new_streams, existing_streams = create_streams_if_needed( + realm, + stream_names, + invite_only=True) + self.assertEqual(len(new_streams), 0) + self.assertEqual(len(existing_streams), 3) + + actual_stream_names = {stream.name for stream in existing_streams} + self.assertEqual(actual_stream_names, set(stream_names)) class StreamAdminTest(ZulipTestCase): def test_make_stream_public(self):