mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
Add test_multi_user_subscription() to backend tests.
(imported from commit aa6849f7c01f083144acd3ecb72cf7e31794dad7)
This commit is contained in:
@@ -10,7 +10,7 @@ from django.db.models import Q
|
|||||||
from zerver.models import Message, UserProfile, Stream, Recipient, Subscription, \
|
from zerver.models import Message, UserProfile, Stream, Recipient, Subscription, \
|
||||||
get_display_recipient, Realm, Client, \
|
get_display_recipient, Realm, Client, \
|
||||||
PreregistrationUser, UserMessage, \
|
PreregistrationUser, UserMessage, \
|
||||||
get_user_profile_by_email, email_to_domain, get_realm
|
get_user_profile_by_email, email_to_domain, get_realm, get_stream
|
||||||
from zerver.tornadoviews import json_get_updates, api_get_messages
|
from zerver.tornadoviews import json_get_updates, api_get_messages
|
||||||
from zerver.decorator import RespondAsynchronously, \
|
from zerver.decorator import RespondAsynchronously, \
|
||||||
RequestVariableConversionError, profiled, JsonableError
|
RequestVariableConversionError, profiled, JsonableError
|
||||||
@@ -1123,6 +1123,84 @@ class SubscriptionAPITest(AuthedTestCase):
|
|||||||
self.assertEqual(len(recipients), 1)
|
self.assertEqual(len(recipients), 1)
|
||||||
self.assertEqual(recipients[0]['email'], invitee)
|
self.assertEqual(recipients[0]['email'], invitee)
|
||||||
|
|
||||||
|
def test_multi_user_subscription(self):
|
||||||
|
email1 = 'cordelia@zulip.com'
|
||||||
|
email2 = 'iago@zulip.com'
|
||||||
|
streams_to_sub = ['multi_user_stream']
|
||||||
|
events = []
|
||||||
|
with tornado_redirected_to_list(events):
|
||||||
|
self.common_subscribe_to_streams(
|
||||||
|
self.test_email,
|
||||||
|
streams_to_sub,
|
||||||
|
dict(principals=ujson.dumps([email1, email2])),
|
||||||
|
)
|
||||||
|
|
||||||
|
add_events = filter(lambda ev: ev['event']['op'] == 'add', events)
|
||||||
|
self.assertEqual(len(add_events), 2)
|
||||||
|
for ev in add_events:
|
||||||
|
self.assertEqual(
|
||||||
|
set(ev['event']['subscriptions'][0]['subscribers']),
|
||||||
|
set([email1, email2])
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO: It's broken that we're sending peer_add events here, since users
|
||||||
|
# are gonna get subscribers in the add events, plus the events are out of
|
||||||
|
# order sometimes, which breaks our JS client. The test for now is just
|
||||||
|
# documenting the current behavior
|
||||||
|
peer_add_events = filter(lambda ev: ev['event']['op'] == 'peer_add', events)
|
||||||
|
self.assertEqual(len(peer_add_events), 2)
|
||||||
|
|
||||||
|
# Now add ourselves
|
||||||
|
events = []
|
||||||
|
with tornado_redirected_to_list(events):
|
||||||
|
self.common_subscribe_to_streams(
|
||||||
|
self.test_email,
|
||||||
|
streams_to_sub,
|
||||||
|
dict(principals=ujson.dumps([self.test_email])),
|
||||||
|
)
|
||||||
|
|
||||||
|
add_event = events.pop(0)
|
||||||
|
add_peer_events = events
|
||||||
|
self.assertEqual(add_event['event']['type'], 'subscriptions')
|
||||||
|
self.assertEqual(add_event['event']['op'], 'add')
|
||||||
|
self.assertEqual(add_event['users'], [get_user_profile_by_email(self.test_email).id])
|
||||||
|
self.assertEqual(
|
||||||
|
set(add_event['event']['subscriptions'][0]['subscribers']),
|
||||||
|
set([email1, email2, self.test_email])
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(len(add_peer_events), 2)
|
||||||
|
for ev in add_peer_events:
|
||||||
|
self.assertEqual(ev['event']['type'], 'subscriptions')
|
||||||
|
self.assertEqual(ev['event']['op'], 'peer_add')
|
||||||
|
self.assertEqual(ev['event']['user_email'], self.test_email)
|
||||||
|
|
||||||
|
|
||||||
|
# Finally, add othello, exercising the do_add_subscription() code path.
|
||||||
|
events = []
|
||||||
|
email3 = 'othello@zulip.com'
|
||||||
|
user_profile = get_user_profile_by_email(email3)
|
||||||
|
realm = Realm.objects.get(domain="zulip.com")
|
||||||
|
stream = get_stream('multi_user_stream', realm)
|
||||||
|
with tornado_redirected_to_list(events):
|
||||||
|
do_add_subscription(user_profile, stream)
|
||||||
|
|
||||||
|
add_event = events.pop(0)
|
||||||
|
add_peer_events = events
|
||||||
|
self.assertEqual(add_event['event']['type'], 'subscriptions')
|
||||||
|
self.assertEqual(add_event['event']['op'], 'add')
|
||||||
|
self.assertEqual(add_event['users'], [get_user_profile_by_email(email3).id])
|
||||||
|
self.assertEqual(
|
||||||
|
set(add_event['event']['subscriptions'][0]['subscribers']),
|
||||||
|
set([email1, email2, email3, self.test_email])
|
||||||
|
)
|
||||||
|
self.assertEqual(len(add_peer_events), 3)
|
||||||
|
for ev in add_peer_events:
|
||||||
|
self.assertEqual(ev['event']['type'], 'subscriptions')
|
||||||
|
self.assertEqual(ev['event']['op'], 'peer_add')
|
||||||
|
self.assertEqual(ev['event']['user_email'], email3)
|
||||||
|
|
||||||
|
|
||||||
@slow(0.15, "common_subscribe_to_streams is slow")
|
@slow(0.15, "common_subscribe_to_streams is slow")
|
||||||
def test_subscriptions_add_for_principal(self):
|
def test_subscriptions_add_for_principal(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user