compose: Use tippy for stream select dropdown.

Fixes #25434
This commit is contained in:
Aman Agrawal
2023-05-07 12:45:04 +00:00
committed by Tim Abbott
parent a196b949f7
commit 8ea59f7f02
25 changed files with 437 additions and 353 deletions

View File

@@ -11,7 +11,6 @@ const $ = require("./lib/zjquery");
const {page_params} = require("./lib/zpage_params");
const channel = mock_esm("../src/channel");
const compose_banner = zrequire("compose_banner");
const compose_pm_pill = zrequire("compose_pm_pill");
const compose_state = zrequire("compose_state");
@@ -22,17 +21,7 @@ const resolved_topic = zrequire("../shared/src/resolved_topic");
const settings_config = zrequire("settings_config");
const settings_data = mock_esm("../src/settings_data");
const stream_data = zrequire("stream_data");
const compose_recipient = zrequire("compose_recipient");
let stream_value = "";
compose_recipient.compose_recipient_widget = {
value() {
return stream_value;
},
render(val) {
stream_value = val;
},
};
const compose_recipient = zrequire("/compose_recipient");
const me = {
email: "me@example.com",
@@ -146,9 +135,8 @@ test_ui("validate_stream_message_address_info", ({mock_template}) => {
assert.ok(subscription_error_rendered);
});
test_ui("validate", ({mock_template}) => {
compose_recipient.update_placeholder_text = () => {};
compose_recipient.on_compose_select_recipient_update = () => {};
test_ui("validate", ({override_rewire, mock_template}) => {
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
function initialize_pm_pill() {
$.clear_all_elements();
@@ -273,6 +261,11 @@ test_ui("validate", ({mock_template}) => {
assert.ok(!compose_validate.validate());
assert.ok(empty_stream_error_rendered);
const denmark = {
stream_id: 100,
name: "Denmark",
};
stream_data.add_sub(denmark);
compose_state.set_stream_name("Denmark");
page_params.realm_mandatory_topics = true;
compose_state.topic("");
@@ -372,6 +365,7 @@ test_ui("validate_stream_message", ({override_rewire, mock_template}) => {
// we are separating it up in different test. Though their relative position
// of execution should not be changed.
mock_banners();
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
$("#compose_banners .wildcard_warning").length = 0;
page_params.user_id = me.user_id;
page_params.realm_mandatory_topics = false;
@@ -419,116 +413,129 @@ test_ui("validate_stream_message", ({override_rewire, mock_template}) => {
assert.ok(wildcards_not_allowed_rendered);
});
test_ui("test_validate_stream_message_post_policy_admin_only", ({mock_template}) => {
// This test is in continuation with test_validate but it has been separated out
// for better readability. Their relative position of execution should not be changed.
// Although the position with respect to test_validate_stream_message does not matter
// as different stream is used for this test.
mock_banners();
page_params.is_admin = false;
const sub = {
stream_id: 102,
name: "stream102",
subscribed: true,
stream_post_policy: stream_data.stream_post_policy_values.admins.code,
};
test_ui(
"test_validate_stream_message_post_policy_admin_only",
({override_rewire, mock_template}) => {
// This test is in continuation with test_validate but it has been separated out
// for better readability. Their relative position of execution should not be changed.
// Although the position with respect to test_validate_stream_message does not matter
// as different stream is used for this test.
mock_banners();
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
page_params.is_admin = false;
const sub = {
stream_id: 102,
name: "stream102",
subscribed: true,
stream_post_policy: stream_data.stream_post_policy_values.admins.code,
};
compose_state.topic("topic102");
compose_state.set_stream_name("stream102");
stream_data.add_sub(sub);
stream_data.add_sub(sub);
compose_state.topic("topic102");
compose_state.set_stream_name("stream102");
let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
assert.equal(
data.banner_text,
$t({
defaultMessage: "You do not have permission to post in this stream.",
}),
);
banner_rendered = true;
});
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
assert.equal(
data.banner_text,
$t({
defaultMessage: "You do not have permission to post in this stream.",
}),
);
banner_rendered = true;
});
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
// Reset error message.
compose_state.set_stream_name("social");
// Reset error message.
compose_state.set_stream_name("social");
page_params.is_admin = false;
page_params.is_guest = true;
page_params.is_admin = false;
page_params.is_guest = true;
compose_state.topic("topic102");
compose_state.set_stream_name("stream102");
banner_rendered = false;
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
});
compose_state.topic("topic102");
compose_state.set_stream_name("stream102");
banner_rendered = false;
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
},
);
test_ui("test_validate_stream_message_post_policy_moderators_only", ({mock_template}) => {
mock_banners();
page_params.is_admin = false;
page_params.is_moderator = false;
page_params.is_guest = false;
test_ui(
"test_validate_stream_message_post_policy_moderators_only",
({override_rewire, mock_template}) => {
mock_banners();
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
const sub = {
stream_id: 104,
name: "stream104",
subscribed: true,
stream_post_policy: stream_data.stream_post_policy_values.moderators.code,
};
page_params.is_admin = false;
page_params.is_moderator = false;
page_params.is_guest = false;
compose_state.topic("topic104");
compose_state.set_stream_name("stream104");
stream_data.add_sub(sub);
let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
assert.equal(
data.banner_text,
$t({
defaultMessage: "You do not have permission to post in this stream.",
}),
);
banner_rendered = true;
});
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
// Reset error message.
compose_state.set_stream_name("social");
const sub = {
stream_id: 104,
name: "stream104",
subscribed: true,
stream_post_policy: stream_data.stream_post_policy_values.moderators.code,
};
page_params.is_guest = true;
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
});
stream_data.add_sub(sub);
compose_state.topic("topic104");
compose_state.set_stream_name("stream104");
let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
assert.equal(
data.banner_text,
$t({
defaultMessage: "You do not have permission to post in this stream.",
}),
);
banner_rendered = true;
});
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
// Reset error message.
compose_state.set_stream_name("social");
test_ui("test_validate_stream_message_post_policy_full_members_only", ({mock_template}) => {
mock_banners();
page_params.is_admin = false;
page_params.is_guest = true;
const sub = {
stream_id: 103,
name: "stream103",
subscribed: true,
stream_post_policy: stream_data.stream_post_policy_values.non_new_members.code,
};
page_params.is_guest = true;
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
},
);
compose_state.topic("topic103");
compose_state.set_stream_name("stream103");
stream_data.add_sub(sub);
let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
assert.equal(
data.banner_text,
$t({
defaultMessage: "You do not have permission to post in this stream.",
}),
);
banner_rendered = true;
});
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
});
test_ui(
"test_validate_stream_message_post_policy_full_members_only",
({override_rewire, mock_template}) => {
mock_banners();
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
page_params.is_admin = false;
page_params.is_guest = true;
const sub = {
stream_id: 103,
name: "stream103",
subscribed: true,
stream_post_policy: stream_data.stream_post_policy_values.non_new_members.code,
};
stream_data.add_sub(sub);
compose_state.topic("topic103");
compose_state.set_stream_name("stream103");
let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
assert.equal(
data.banner_text,
$t({
defaultMessage: "You do not have permission to post in this stream.",
}),
);
banner_rendered = true;
});
assert.ok(!compose_validate.validate());
assert.ok(banner_rendered);
},
);
test_ui("test_check_overflow_text", ({mock_template}) => {
mock_banners();
@@ -665,9 +672,10 @@ test_ui("warn_if_private_stream_is_linked", ({mock_template}) => {
assert.ok(banner_rendered);
});
test_ui("warn_if_mentioning_unsubscribed_user", ({override, mock_template}) => {
test_ui("warn_if_mentioning_unsubscribed_user", ({override, override_rewire, mock_template}) => {
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
const $textarea = $("<textarea>").attr("id", "compose-textarea");
stream_value = "";
compose_state.set_stream_name("");
override(settings_data, "user_can_subscribe_other_users", () => true);
let mentioned_details = {
@@ -707,11 +715,12 @@ test_ui("warn_if_mentioning_unsubscribed_user", ({override, mock_template}) => {
compose_validate.warn_if_mentioning_unsubscribed_user(mentioned_details, $textarea);
assert.ok(!new_banner_rendered);
compose_state.set_stream_name("random");
const sub = {
stream_id: 111,
name: "random",
};
stream_data.add_sub(sub);
compose_state.set_stream_name("random");
// Test with invalid stream in compose box. It should return noop.
new_banner_rendered = false;
@@ -726,7 +735,6 @@ test_ui("warn_if_mentioning_unsubscribed_user", ({override, mock_template}) => {
};
people.add_active_user(mentioned_details);
stream_data.add_sub(sub);
new_banner_rendered = false;
const $banner_container = $("#compose_banners");
$banner_container.set_find_results(".recipient_not_subscribed", []);
@@ -752,8 +760,9 @@ test_ui("warn_if_mentioning_unsubscribed_user", ({override, mock_template}) => {
assert.ok(!new_banner_rendered);
});
test_ui("test warn_if_topic_resolved", ({override, mock_template}) => {
test_ui("test warn_if_topic_resolved", ({override, override_rewire, mock_template}) => {
mock_banners();
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
$("#compose_banners .topic_resolved").length = 0;
override(settings_data, "user_can_move_messages_to_another_topic", () => true);
@@ -778,6 +787,7 @@ test_ui("test warn_if_topic_resolved", ({override, mock_template}) => {
stream_data.add_sub(sub);
compose_state.set_message_type("stream");
blueslip.expect("error", "Unable to select stream: Do not exist");
compose_state.set_stream_name("Do not exist");
compose_state.topic(resolved_topic.resolve_name("hello"));
compose_state.message_content("content");