mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	invitations: Avoid adding to notifications stream unconditionally.
Adding invited users to the notifications stream unconditionally isn't a correct behaviour for guest users, where the previous behavior of including the notifications stream no longer makes sense. Therefore, while inviting a new user, the notifications stream is listed along with other streams with a message "recieves notifications for new streams" in order to distinguish it from other streams. Fixes #13645.
This commit is contained in:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							05f1c6983b
						
					
				
				
					commit
					13b3eb24b0
				
			@@ -123,20 +123,20 @@ function generate_multiuse_invite() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.get_invite_streams = function () {
 | 
			
		||||
    const streams = _.filter(stream_data.get_invite_stream_data(), function (stream) {
 | 
			
		||||
        const is_notifications_stream = stream.name === page_params.notifications_stream;
 | 
			
		||||
        // You can't actually elect to invite someone to the
 | 
			
		||||
        // notifications stream. We won't even show it as a choice unless
 | 
			
		||||
        // it's the only stream you have, or if you've made it private.
 | 
			
		||||
        return stream_data.subscribed_streams().length === 1 ||
 | 
			
		||||
            !is_notifications_stream ||
 | 
			
		||||
            is_notifications_stream && stream.is_invite_only;
 | 
			
		||||
    });
 | 
			
		||||
    const streams = stream_data.get_invite_stream_data();
 | 
			
		||||
 | 
			
		||||
    function compare_streams(a, b) {
 | 
			
		||||
        return a.name.localeCompare(b.name);
 | 
			
		||||
    }
 | 
			
		||||
    streams.sort(compare_streams);
 | 
			
		||||
    return streams;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function update_subscription_checkboxes() {
 | 
			
		||||
    const data = {streams: exports.get_invite_streams()};
 | 
			
		||||
    const data = {
 | 
			
		||||
        streams: exports.get_invite_streams(),
 | 
			
		||||
        notifications_stream: page_params.notifications_stream,
 | 
			
		||||
    };
 | 
			
		||||
    const html = render_invite_subscription(data);
 | 
			
		||||
    $('#streams_to_add').html(html);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,11 @@
 | 
			
		||||
          {{#if default_stream}}checked="checked"{{/if}} />
 | 
			
		||||
        <span></span>
 | 
			
		||||
        {{#if invite_only}}<i class="fa fa-lock" aria-hidden="true"></i>{{/if}}
 | 
			
		||||
        {{#if (eq name ../notifications_stream)}}
 | 
			
		||||
        #{{name}} <i>({{t 'receives new stream notifications' }})</i>
 | 
			
		||||
        {{else}}
 | 
			
		||||
        #{{name}}
 | 
			
		||||
        {{/if}}
 | 
			
		||||
    </label>
 | 
			
		||||
    {{/each}}
 | 
			
		||||
</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -891,27 +891,6 @@ class InviteUserTest(InviteUserBase):
 | 
			
		||||
        self.assertTrue(find_key_by_email(email2))
 | 
			
		||||
        self.check_sent_emails([email, email2])
 | 
			
		||||
 | 
			
		||||
    def test_successful_invite_user_with_notifications_stream(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        A call to /json/invites with valid parameters unconditionally
 | 
			
		||||
        subscribes the invitee to the notifications stream if it exists and is
 | 
			
		||||
        public.
 | 
			
		||||
        """
 | 
			
		||||
        realm = get_realm('zulip')
 | 
			
		||||
        notifications_stream = get_stream('Verona', realm)
 | 
			
		||||
        realm.notifications_stream_id = notifications_stream.id
 | 
			
		||||
        realm.save()
 | 
			
		||||
 | 
			
		||||
        self.login(self.example_email("hamlet"))
 | 
			
		||||
        invitee = 'alice-test@zulip.com'
 | 
			
		||||
        self.assert_json_success(self.invite(invitee, ['Denmark']))
 | 
			
		||||
        self.assertTrue(find_key_by_email(invitee))
 | 
			
		||||
        self.check_sent_emails([invitee])
 | 
			
		||||
 | 
			
		||||
        prereg_user = PreregistrationUser.objects.get(email=invitee)
 | 
			
		||||
        stream_ids = [stream.id for stream in prereg_user.streams.all()]
 | 
			
		||||
        self.assertTrue(notifications_stream.id in stream_ids)
 | 
			
		||||
 | 
			
		||||
    def test_invite_user_signup_initial_history(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Test that a new user invited to a stream receives some initial
 | 
			
		||||
 
 | 
			
		||||
@@ -37,12 +37,6 @@ def invite_users_backend(request: HttpRequest, user_profile: UserProfile,
 | 
			
		||||
 | 
			
		||||
    invitee_emails = get_invitee_emails_set(invitee_emails_raw)
 | 
			
		||||
 | 
			
		||||
    # We unconditionally sub you to the notifications stream if it
 | 
			
		||||
    # exists and is public.
 | 
			
		||||
    notifications_stream = user_profile.realm.notifications_stream  # type: Optional[Stream]
 | 
			
		||||
    if notifications_stream and not notifications_stream.invite_only:
 | 
			
		||||
        stream_ids.append(notifications_stream.id)
 | 
			
		||||
 | 
			
		||||
    streams = []  # type: List[Stream]
 | 
			
		||||
    for stream_id in stream_ids:
 | 
			
		||||
        try:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user