user_topics_ui: Fix 'toggle_topic_visibility_policy' behavior.

This commit updates the stale logic in 'toggle_topic_visibility_policy'
function. It was not updated after the addition of 'follow' visibility
policy resulting in buggy behavior.
This commit is contained in:
Prakhar Pratyush 2024-08-14 10:35:04 +05:30 committed by Tim Abbott
parent cbc3f84be4
commit 39c5bb9fa5
2 changed files with 77 additions and 12 deletions

View File

@ -1,4 +1,5 @@
import $ from "jquery";
import assert from "minimalistic-assert";
import * as inbox_util from "./inbox_util";
import * as message_lists from "./message_lists";
@ -94,23 +95,33 @@ export function toggle_topic_visibility_policy(message: Message): void {
return;
}
if (
user_topics.is_topic_muted(stream_id, topic) ||
user_topics.is_topic_unmuted(stream_id, topic)
) {
user_topics.set_user_topic_visibility_policy(
stream_id,
topic,
user_topics.all_visibility_policies.INHERIT,
);
} else {
if (sub_store.get(stream_id)?.is_muted) {
const sub = sub_store.get(stream_id);
assert(sub !== undefined);
if (sub.is_muted) {
if (user_topics.is_topic_unmuted_or_followed(stream_id, topic)) {
user_topics.set_user_topic_visibility_policy(
stream_id,
topic,
user_topics.all_visibility_policies.INHERIT,
true,
);
} else {
user_topics.set_user_topic_visibility_policy(
stream_id,
topic,
user_topics.all_visibility_policies.UNMUTED,
true,
);
}
} else {
if (user_topics.is_topic_muted(stream_id, topic)) {
user_topics.set_user_topic_visibility_policy(
stream_id,
topic,
user_topics.all_visibility_policies.INHERIT,
true,
);
} else {
user_topics.set_user_topic_visibility_policy(
stream_id,

View File

@ -8,6 +8,7 @@ const {run_test} = require("./lib/test");
const user_topics = zrequire("user_topics");
const user_topics_ui = zrequire("user_topics_ui");
const stream_data = zrequire("stream_data");
const sub_store = zrequire("sub_store");
const design = {
stream_id: 101,
@ -29,7 +30,7 @@ function update_visibility_policy(visibility_policy) {
user_topics.update_user_topics(design.stream_id, design.name, "java", visibility_policy);
}
test("toggle_topic_visibility_policy", () => {
test("toggle_topic_visibility_policy", ({override_rewire}) => {
// Mute a topic
assert.ok(!user_topics.is_topic_muted(design.stream_id, "java"));
update_visibility_policy(user_topics.all_visibility_policies.MUTED);
@ -47,4 +48,57 @@ test("toggle_topic_visibility_policy", () => {
// Verify that we can't toggle visibility policy in unsubscribed channel.
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(user_topics.is_topic_muted(design.stream_id, "java"));
override_rewire(
user_topics,
"set_user_topic_visibility_policy",
(stream_id, topic_name, visibility_policy) => {
const stream_name = sub_store.maybe_get_stream_name(stream_id);
user_topics.update_user_topics(stream_id, stream_name, topic_name, visibility_policy);
},
);
design.subscribed = true;
// For NOT muted channel
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(
user_topics.get_topic_visibility_policy(design.stream_id, "java") ===
user_topics.all_visibility_policies.INHERIT,
);
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(user_topics.is_topic_muted(design.stream_id, "java"));
update_visibility_policy(user_topics.all_visibility_policies.UNMUTED);
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(user_topics.is_topic_muted(design.stream_id, "java"));
update_visibility_policy(user_topics.all_visibility_policies.FOLLOWED);
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(user_topics.is_topic_muted(design.stream_id, "java"));
// For muted channel
design.is_muted = true;
update_visibility_policy(user_topics.all_visibility_policies.INHERIT);
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(user_topics.is_topic_unmuted(design.stream_id, "java"));
update_visibility_policy(user_topics.all_visibility_policies.MUTED);
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(user_topics.is_topic_unmuted(design.stream_id, "java"));
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(
user_topics.get_topic_visibility_policy(design.stream_id, "java") ===
user_topics.all_visibility_policies.INHERIT,
);
update_visibility_policy(user_topics.all_visibility_policies.FOLLOWED);
user_topics_ui.toggle_topic_visibility_policy(message);
assert.ok(
user_topics.get_topic_visibility_policy(design.stream_id, "java") ===
user_topics.all_visibility_policies.INHERIT,
);
});