mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 06:23:38 +00:00
topics: Follow topics that are merged into even after merge.
Previously, when there were two topics -- A and B, and a user follows topic A, then when messages of topic B are merged into topic A then topic A loses its follow status. This is fixed by updating the algorithm for getting the visibility policy after merge to be followed in the above case. Fixes #35226
This commit is contained in:
committed by
Tim Abbott
parent
8330e7c283
commit
cb01bdf0c4
@@ -488,6 +488,9 @@ def get_visibility_policy_after_merge(
|
|||||||
# rather than hiding them.
|
# rather than hiding them.
|
||||||
visibility_policies = {orig_topic_visibility_policy, target_topic_visibility_policy}
|
visibility_policies = {orig_topic_visibility_policy, target_topic_visibility_policy}
|
||||||
|
|
||||||
|
if UserTopic.VisibilityPolicy.FOLLOWED in visibility_policies:
|
||||||
|
return UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
|
||||||
if UserTopic.VisibilityPolicy.UNMUTED in visibility_policies:
|
if UserTopic.VisibilityPolicy.UNMUTED in visibility_policies:
|
||||||
return UserTopic.VisibilityPolicy.UNMUTED
|
return UserTopic.VisibilityPolicy.UNMUTED
|
||||||
|
|
||||||
|
|||||||
@@ -764,6 +764,7 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
hamlet = self.example_user("hamlet")
|
hamlet = self.example_user("hamlet")
|
||||||
cordelia = self.example_user("cordelia")
|
cordelia = self.example_user("cordelia")
|
||||||
aaron = self.example_user("aaron")
|
aaron = self.example_user("aaron")
|
||||||
|
shiva = self.example_user("shiva")
|
||||||
|
|
||||||
self.subscribe(hamlet, stream_name)
|
self.subscribe(hamlet, stream_name)
|
||||||
self.login_user(hamlet)
|
self.login_user(hamlet)
|
||||||
@@ -778,6 +779,7 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
# INHERIT INHERIT INHERIT
|
# INHERIT INHERIT INHERIT
|
||||||
# INHERIT MUTED INHERIT
|
# INHERIT MUTED INHERIT
|
||||||
# INHERIT UNMUTED UNMUTED
|
# INHERIT UNMUTED UNMUTED
|
||||||
|
# INHERIT FOLLOWED FOLLOWED
|
||||||
orig_topic = "Topic1"
|
orig_topic = "Topic1"
|
||||||
target_topic = "Topic1 edited"
|
target_topic = "Topic1 edited"
|
||||||
orig_message_id = self.send_stream_message(
|
orig_message_id = self.send_stream_message(
|
||||||
@@ -799,6 +801,9 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
do_set_user_topic_visibility_policy(
|
do_set_user_topic_visibility_policy(
|
||||||
aaron, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
aaron, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
||||||
)
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
shiva, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
|
||||||
check_update_message(
|
check_update_message(
|
||||||
user_profile=hamlet,
|
user_profile=hamlet,
|
||||||
@@ -820,6 +825,9 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
aaron, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
aaron, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
)
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
shiva, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
|
)
|
||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
hamlet, target_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
hamlet, target_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
)
|
)
|
||||||
@@ -829,6 +837,9 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
aaron, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
aaron, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
||||||
)
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
shiva, target_topic, stream, UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
|
||||||
# Test the following cases:
|
# Test the following cases:
|
||||||
#
|
#
|
||||||
@@ -836,6 +847,7 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
# MUTED INHERIT INHERIT
|
# MUTED INHERIT INHERIT
|
||||||
# MUTED MUTED MUTED
|
# MUTED MUTED MUTED
|
||||||
# MUTED UNMUTED UNMUTED
|
# MUTED UNMUTED UNMUTED
|
||||||
|
# MUTED FOLLOWED FOLLOWED
|
||||||
orig_topic = "Topic2"
|
orig_topic = "Topic2"
|
||||||
target_topic = "Topic2 edited"
|
target_topic = "Topic2 edited"
|
||||||
orig_message_id = self.send_stream_message(
|
orig_message_id = self.send_stream_message(
|
||||||
@@ -854,12 +866,18 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
do_set_user_topic_visibility_policy(
|
do_set_user_topic_visibility_policy(
|
||||||
aaron, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
aaron, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
||||||
)
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
shiva, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
||||||
|
)
|
||||||
do_set_user_topic_visibility_policy(
|
do_set_user_topic_visibility_policy(
|
||||||
cordelia, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
cordelia, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
||||||
)
|
)
|
||||||
do_set_user_topic_visibility_policy(
|
do_set_user_topic_visibility_policy(
|
||||||
aaron, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
aaron, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
||||||
)
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
shiva, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
|
||||||
check_update_message(
|
check_update_message(
|
||||||
user_profile=hamlet,
|
user_profile=hamlet,
|
||||||
@@ -881,6 +899,9 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
aaron, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
aaron, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
)
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
shiva, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
|
)
|
||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
hamlet, target_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
hamlet, target_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
)
|
)
|
||||||
@@ -890,6 +911,9 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
aaron, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
aaron, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
||||||
)
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
shiva, target_topic, stream, UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
|
||||||
# Test the following cases:
|
# Test the following cases:
|
||||||
#
|
#
|
||||||
@@ -897,6 +921,7 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
# UNMUTED INHERIT UNMUTED
|
# UNMUTED INHERIT UNMUTED
|
||||||
# UNMUTED MUTED UNMUTED
|
# UNMUTED MUTED UNMUTED
|
||||||
# UNMUTED UNMUTED UNMUTED
|
# UNMUTED UNMUTED UNMUTED
|
||||||
|
# UNMUTED FOLLOWED FOLLOWED
|
||||||
orig_topic = "Topic3"
|
orig_topic = "Topic3"
|
||||||
target_topic = "Topic3 edited"
|
target_topic = "Topic3 edited"
|
||||||
orig_message_id = self.send_stream_message(
|
orig_message_id = self.send_stream_message(
|
||||||
@@ -915,12 +940,88 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
do_set_user_topic_visibility_policy(
|
do_set_user_topic_visibility_policy(
|
||||||
aaron, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
aaron, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
||||||
)
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
shiva, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
||||||
|
)
|
||||||
do_set_user_topic_visibility_policy(
|
do_set_user_topic_visibility_policy(
|
||||||
cordelia, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
cordelia, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
||||||
)
|
)
|
||||||
do_set_user_topic_visibility_policy(
|
do_set_user_topic_visibility_policy(
|
||||||
aaron, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
aaron, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
||||||
)
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
shiva, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
|
||||||
|
check_update_message(
|
||||||
|
user_profile=hamlet,
|
||||||
|
message_id=orig_message_id,
|
||||||
|
stream_id=None,
|
||||||
|
topic_name=target_topic,
|
||||||
|
propagate_mode="change_all",
|
||||||
|
send_notification_to_old_thread=False,
|
||||||
|
send_notification_to_new_thread=False,
|
||||||
|
content=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
hamlet, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
cordelia, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
aaron, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
shiva, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
hamlet, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
||||||
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
cordelia, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
||||||
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
aaron, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
||||||
|
)
|
||||||
|
self.assert_has_visibility_policy(
|
||||||
|
shiva, target_topic, stream, UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
|
||||||
|
# Test the following cases:
|
||||||
|
#
|
||||||
|
# orig_topic | target_topic | final behaviour
|
||||||
|
# FOLLOWED INHERIT FOLLOWED
|
||||||
|
# FOLLOWED MUTED FOLLOWED
|
||||||
|
# FOLLOWED UNMUTED FOLLOWED
|
||||||
|
orig_topic = "Topic4"
|
||||||
|
target_topic = "Topic4 edited"
|
||||||
|
orig_message_id = self.send_stream_message(
|
||||||
|
hamlet, stream_name, topic_name=orig_topic, content="Hello World"
|
||||||
|
)
|
||||||
|
self.send_stream_message(
|
||||||
|
hamlet, stream_name, topic_name=target_topic, content="Hello World 2"
|
||||||
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
cordelia, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
hamlet, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
cordelia, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
cordelia, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.MUTED
|
||||||
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
aaron, stream, orig_topic, visibility_policy=UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
|
)
|
||||||
|
do_set_user_topic_visibility_policy(
|
||||||
|
aaron, stream, target_topic, visibility_policy=UserTopic.VisibilityPolicy.UNMUTED
|
||||||
|
)
|
||||||
|
|
||||||
check_update_message(
|
check_update_message(
|
||||||
user_profile=hamlet,
|
user_profile=hamlet,
|
||||||
@@ -943,13 +1044,13 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||||||
aaron, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
aaron, orig_topic, stream, UserTopic.VisibilityPolicy.INHERIT
|
||||||
)
|
)
|
||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
hamlet, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
hamlet, target_topic, stream, UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
)
|
)
|
||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
cordelia, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
cordelia, target_topic, stream, UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
)
|
)
|
||||||
self.assert_has_visibility_policy(
|
self.assert_has_visibility_policy(
|
||||||
aaron, target_topic, stream, UserTopic.VisibilityPolicy.UNMUTED
|
aaron, target_topic, stream, UserTopic.VisibilityPolicy.FOLLOWED
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_user_topic_states_on_moving_to_topic_with_no_messages(self) -> None:
|
def test_user_topic_states_on_moving_to_topic_with_no_messages(self) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user