mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 06:23:38 +00:00
bulk_access_messages: Support passing in a stream for all messages.
This lets us avoid fetching the Stream in a loop.
This commit is contained in:
@@ -726,7 +726,9 @@ def has_message_access(
|
|||||||
).exists()
|
).exists()
|
||||||
|
|
||||||
|
|
||||||
def bulk_access_messages(user_profile: UserProfile, messages: Sequence[Message]) -> List[Message]:
|
def bulk_access_messages(
|
||||||
|
user_profile: UserProfile, messages: Sequence[Message], *, stream: Optional[Stream] = None
|
||||||
|
) -> List[Message]:
|
||||||
filtered_messages = []
|
filtered_messages = []
|
||||||
|
|
||||||
user_message_set = set(
|
user_message_set = set(
|
||||||
@@ -737,7 +739,9 @@ def bulk_access_messages(user_profile: UserProfile, messages: Sequence[Message])
|
|||||||
|
|
||||||
for message in messages:
|
for message in messages:
|
||||||
has_user_message = message.id in user_message_set
|
has_user_message = message.id in user_message_set
|
||||||
if has_message_access(user_profile, message, has_user_message=has_user_message):
|
if has_message_access(
|
||||||
|
user_profile, message, has_user_message=has_user_message, stream=stream
|
||||||
|
):
|
||||||
filtered_messages.append(message)
|
filtered_messages.append(message)
|
||||||
return filtered_messages
|
return filtered_messages
|
||||||
|
|
||||||
|
|||||||
@@ -1306,8 +1306,8 @@ class MessageAccessTests(ZulipTestCase):
|
|||||||
]
|
]
|
||||||
|
|
||||||
with queries_captured() as queries:
|
with queries_captured() as queries:
|
||||||
filtered_messages = bulk_access_messages(later_subscribed_user, messages)
|
filtered_messages = bulk_access_messages(later_subscribed_user, messages, stream=stream)
|
||||||
self.assert_length(queries, 3)
|
self.assert_length(queries, 1)
|
||||||
|
|
||||||
# Message sent before subscribing wouldn't be accessible by later
|
# Message sent before subscribing wouldn't be accessible by later
|
||||||
# subscribed user as stream has protected history
|
# subscribed user as stream has protected history
|
||||||
@@ -1317,8 +1317,8 @@ class MessageAccessTests(ZulipTestCase):
|
|||||||
do_change_stream_invite_only(stream, True, history_public_to_subscribers=True)
|
do_change_stream_invite_only(stream, True, history_public_to_subscribers=True)
|
||||||
|
|
||||||
with queries_captured() as queries:
|
with queries_captured() as queries:
|
||||||
filtered_messages = bulk_access_messages(later_subscribed_user, messages)
|
filtered_messages = bulk_access_messages(later_subscribed_user, messages, stream=stream)
|
||||||
self.assert_length(queries, 4)
|
self.assert_length(queries, 2)
|
||||||
|
|
||||||
# Message sent before subscribing are accessible by 8user as stream
|
# Message sent before subscribing are accessible by 8user as stream
|
||||||
# don't have protected history
|
# don't have protected history
|
||||||
@@ -1328,18 +1328,25 @@ class MessageAccessTests(ZulipTestCase):
|
|||||||
unsubscribed_user = self.example_user("ZOE")
|
unsubscribed_user = self.example_user("ZOE")
|
||||||
|
|
||||||
with queries_captured() as queries:
|
with queries_captured() as queries:
|
||||||
filtered_messages = bulk_access_messages(unsubscribed_user, messages)
|
filtered_messages = bulk_access_messages(unsubscribed_user, messages, stream=stream)
|
||||||
self.assert_length(queries, 7)
|
self.assert_length(queries, 3)
|
||||||
|
|
||||||
self.assertEqual(len(filtered_messages), 0)
|
self.assertEqual(len(filtered_messages), 0)
|
||||||
|
|
||||||
|
# Verify an exception is thrown if called where the passed
|
||||||
|
# stream not matching the messages.
|
||||||
|
with self.assertRaises(AssertionError):
|
||||||
|
bulk_access_messages(
|
||||||
|
unsubscribed_user, messages, stream=get_stream("Denmark", unsubscribed_user.realm)
|
||||||
|
)
|
||||||
|
|
||||||
def test_bulk_access_messages_public_stream(self) -> None:
|
def test_bulk_access_messages_public_stream(self) -> None:
|
||||||
user = self.example_user("hamlet")
|
user = self.example_user("hamlet")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
|
|
||||||
# Testing messages accessiblity including a public stream message
|
# Testing messages accessiblity including a public stream message
|
||||||
stream_name = "public_stream"
|
stream_name = "public_stream"
|
||||||
self.subscribe(user, stream_name)
|
stream = self.subscribe(user, stream_name)
|
||||||
message_one_id = self.send_stream_message(user, stream_name, "Message one")
|
message_one_id = self.send_stream_message(user, stream_name, "Message one")
|
||||||
|
|
||||||
later_subscribed_user = self.example_user("cordelia")
|
later_subscribed_user = self.example_user("cordelia")
|
||||||
@@ -1354,13 +1361,17 @@ class MessageAccessTests(ZulipTestCase):
|
|||||||
]
|
]
|
||||||
|
|
||||||
# All public stream messages are always accessible
|
# All public stream messages are always accessible
|
||||||
filtered_messages = bulk_access_messages(later_subscribed_user, messages)
|
with queries_captured() as queries:
|
||||||
|
filtered_messages = bulk_access_messages(later_subscribed_user, messages, stream=stream)
|
||||||
self.assertEqual(len(filtered_messages), 2)
|
self.assertEqual(len(filtered_messages), 2)
|
||||||
|
self.assert_length(queries, 1)
|
||||||
|
|
||||||
unsubscribed_user = self.example_user("ZOE")
|
unsubscribed_user = self.example_user("ZOE")
|
||||||
filtered_messages = bulk_access_messages(unsubscribed_user, messages)
|
with queries_captured() as queries:
|
||||||
|
filtered_messages = bulk_access_messages(unsubscribed_user, messages, stream=stream)
|
||||||
|
|
||||||
self.assertEqual(len(filtered_messages), 2)
|
self.assertEqual(len(filtered_messages), 2)
|
||||||
|
self.assert_length(queries, 1)
|
||||||
|
|
||||||
|
|
||||||
class PersonalMessagesFlagTest(ZulipTestCase):
|
class PersonalMessagesFlagTest(ZulipTestCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user