mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 06:23:38 +00:00
When we were preparing the conversion to ES modules in 2019, the primary obstacle was that the Node tests extensively relied on the ability to reach into modules and mutate their CommonJS exports in order to mock things. ES module bindings are not mutable, so in commit173c9cee42we added babel-plugin-rewire-ts as a kludgy transpilation-based workaround for this to unblock the conversion. However, babel-plugin-rewire-ts is slow, buggy, nonstandard, confusing, and unmaintained. It’s incompatible with running our ES modules as native ES modules, and prevents us from taking advantage of modern tools for ES modules. So we want to excise all use of __Rewire__ (and the disallow_rewire, override_rewire helper functions that rely on it) from the tests and remove babel-plugin-rewire-ts. Commits64abdc199eande17ba5260a(#20730) prepared for this by letting us see where __Rewire__ is being used. Now we go through and remove most of the uses that are easy to remove without modifying the production code at all. Signed-off-by: Anders Kaseorg <anders@zulip.com>
820 lines
31 KiB
JavaScript
820 lines
31 KiB
JavaScript
"use strict";
|
|
|
|
const {strict: assert} = require("assert");
|
|
|
|
const {$t} = require("../zjsunit/i18n");
|
|
const {mock_esm, set_global, zrequire} = require("../zjsunit/namespace");
|
|
const {run_test} = require("../zjsunit/test");
|
|
const blueslip = require("../zjsunit/zblueslip");
|
|
const $ = require("../zjsunit/zjquery");
|
|
const {page_params} = require("../zjsunit/zpage_params");
|
|
|
|
const noop = () => {};
|
|
|
|
const realm_icon = mock_esm("../../static/js/realm_icon");
|
|
|
|
const channel = mock_esm("../../static/js/channel");
|
|
const overlays = mock_esm("../../static/js/overlays");
|
|
|
|
mock_esm("../../static/js/csrf", {csrf_token: "token-stub"});
|
|
mock_esm("../../static/js/list_widget", {
|
|
create: () => ({init: noop}),
|
|
});
|
|
mock_esm("../../static/js/loading", {
|
|
make_indicator: noop,
|
|
destroy_indicator: noop,
|
|
});
|
|
|
|
set_global(
|
|
"FormData",
|
|
class FormData {
|
|
append(field, val) {
|
|
this[field] = val;
|
|
}
|
|
},
|
|
);
|
|
|
|
const settings_config = zrequire("settings_config");
|
|
const settings_bots = zrequire("settings_bots");
|
|
const stream_settings_data = zrequire("stream_settings_data");
|
|
const settings_account = zrequire("settings_account");
|
|
const settings_org = zrequire("settings_org");
|
|
const dropdown_list_widget = zrequire("dropdown_list_widget");
|
|
|
|
function test(label, f) {
|
|
run_test(label, (helpers) => {
|
|
$("#realm-icon-upload-widget .upload-spinner-background").css = () => {};
|
|
page_params.is_admin = false;
|
|
page_params.realm_domains = [
|
|
{domain: "example.com", allow_subdomains: true},
|
|
{domain: "example.org", allow_subdomains: false},
|
|
];
|
|
page_params.realm_authentication_methods = {};
|
|
settings_org.reset();
|
|
f(helpers);
|
|
});
|
|
}
|
|
|
|
test("unloaded", () => {
|
|
// This test mostly gets us line coverage, and makes
|
|
// sure things don't explode before set_up is called.
|
|
|
|
settings_org.reset();
|
|
settings_org.populate_realm_domains_label();
|
|
settings_org.populate_auth_methods();
|
|
});
|
|
|
|
function createSaveButtons(subsection) {
|
|
const $stub_save_button_header = $(`#org-${CSS.escape(subsection)}`);
|
|
const $save_button_controls = $(".save-button-controls");
|
|
const $stub_save_button = $(`#org-submit-${CSS.escape(subsection)}`);
|
|
const $stub_discard_button = $(`#org-discard-${CSS.escape(subsection)}`);
|
|
const $stub_save_button_text = $(".save-discard-widget-button-text");
|
|
$stub_save_button_header.set_find_results(
|
|
".subsection-failed-status p",
|
|
$("<failed-status-stub>"),
|
|
);
|
|
$stub_save_button.closest = () => $stub_save_button_header;
|
|
$save_button_controls.set_find_results(".save-button", $stub_save_button);
|
|
$stub_save_button.set_find_results(".save-discard-widget-button-text", $stub_save_button_text);
|
|
$stub_save_button_header.set_find_results(".save-button-controls", $save_button_controls);
|
|
$stub_save_button_header.set_find_results(
|
|
".subsection-changes-discard button",
|
|
$(`#org-discard-${CSS.escape(subsection)}`),
|
|
);
|
|
$save_button_controls.set_find_results(".discard-button", $stub_discard_button);
|
|
const props = {};
|
|
props.hidden = false;
|
|
$save_button_controls.fadeIn = () => {
|
|
props.hidden = false;
|
|
};
|
|
$save_button_controls.fadeOut = () => {
|
|
props.hidden = true;
|
|
};
|
|
return {
|
|
props,
|
|
$save_button: $stub_save_button,
|
|
$discard_button: $stub_discard_button,
|
|
$save_button_header: $stub_save_button_header,
|
|
$save_button_controls,
|
|
$save_button_text: $stub_save_button_text,
|
|
};
|
|
}
|
|
|
|
function test_submit_settings_form(override, submit_form) {
|
|
Object.assign(page_params, {
|
|
realm_bot_creation_policy: settings_bots.bot_creation_policy_values.restricted.code,
|
|
realm_email_address_visibility:
|
|
settings_config.email_address_visibility_values.admins_only.code,
|
|
realm_add_custom_emoji_policy: settings_config.common_policy_values.by_admins_only.code,
|
|
realm_waiting_period_threshold: 1,
|
|
realm_default_language: '"es"',
|
|
realm_invite_to_stream_policy: settings_config.common_policy_values.by_admins_only.code,
|
|
realm_create_private_stream_policy: settings_config.common_policy_values.by_members.code,
|
|
realm_create_public_stream_policy: settings_config.common_policy_values.by_members.code,
|
|
realm_invite_to_realm_policy: settings_config.common_policy_values.by_members.code,
|
|
});
|
|
|
|
override(global, "setTimeout", (func) => func());
|
|
const ev = {
|
|
preventDefault: noop,
|
|
stopPropagation: noop,
|
|
};
|
|
|
|
let patched;
|
|
let data;
|
|
let success_callback;
|
|
override(channel, "patch", (req) => {
|
|
patched = true;
|
|
assert.equal(req.url, "/json/realm");
|
|
data = req.data;
|
|
success_callback = req.success;
|
|
});
|
|
|
|
let subsection = "other-permissions";
|
|
ev.currentTarget = `#org-submit-${CSS.escape(subsection)}`;
|
|
let stubs = createSaveButtons(subsection);
|
|
let $save_button = stubs.$save_button;
|
|
$save_button.attr("id", `org-submit-${subsection}`);
|
|
|
|
$("#id_realm_waiting_period_threshold").val(10);
|
|
|
|
const $invite_to_stream_policy_elem = $("#id_realm_invite_to_stream_policy");
|
|
$invite_to_stream_policy_elem.val("1");
|
|
$invite_to_stream_policy_elem.attr("id", "id_realm_invite_to_stream_policy");
|
|
$invite_to_stream_policy_elem.data = () => "number";
|
|
|
|
const $create_public_stream_policy_elem = $("#id_realm_create_public_stream_policy");
|
|
$create_public_stream_policy_elem.val("2");
|
|
$create_public_stream_policy_elem.attr("id", "id_realm_create_public_stream_policy");
|
|
$create_public_stream_policy_elem.data = () => "number";
|
|
|
|
const $create_private_stream_policy_elem = $("#id_realm_create_private_stream_policy");
|
|
$create_private_stream_policy_elem.val("2");
|
|
$create_private_stream_policy_elem.attr("id", "id_realm_create_private_stream_policy");
|
|
$create_private_stream_policy_elem.data = () => "number";
|
|
|
|
const $add_custom_emoji_policy_elem = $("#id_realm_add_custom_emoji_policy");
|
|
$add_custom_emoji_policy_elem.val("1");
|
|
$add_custom_emoji_policy_elem.attr("id", "id_realm_add_custom_emoji_policy");
|
|
$add_custom_emoji_policy_elem.data = () => "number";
|
|
|
|
const $bot_creation_policy_elem = $("#id_realm_bot_creation_policy");
|
|
$bot_creation_policy_elem.val("1");
|
|
$bot_creation_policy_elem.attr("id", "id_realm_bot_creation_policy");
|
|
$bot_creation_policy_elem.data = () => "number";
|
|
const $email_address_visibility_elem = $("#id_realm_email_address_visibility");
|
|
$email_address_visibility_elem.val("1");
|
|
$email_address_visibility_elem.attr("id", "id_realm_email_address_visibility");
|
|
$email_address_visibility_elem.data = () => "number";
|
|
|
|
const $invite_to_realm_policy_elem = $("#id_realm_invite_to_realm_policy");
|
|
$invite_to_realm_policy_elem.val("2");
|
|
$invite_to_realm_policy_elem.attr("id", "id_realm_invite_to_realm_policy");
|
|
$invite_to_realm_policy_elem.data = () => "number";
|
|
|
|
let $subsection_elem = $(`#org-${CSS.escape(subsection)}`);
|
|
$subsection_elem.closest = () => $subsection_elem;
|
|
$subsection_elem.set_find_results(".prop-element", [
|
|
$bot_creation_policy_elem,
|
|
$email_address_visibility_elem,
|
|
$add_custom_emoji_policy_elem,
|
|
$create_public_stream_policy_elem,
|
|
$create_private_stream_policy_elem,
|
|
$invite_to_realm_policy_elem,
|
|
$invite_to_stream_policy_elem,
|
|
]);
|
|
|
|
patched = false;
|
|
submit_form(ev);
|
|
assert.ok(patched);
|
|
|
|
let expected_value = {
|
|
bot_creation_policy: 1,
|
|
invite_to_realm_policy: 2,
|
|
invite_to_stream_policy: 1,
|
|
email_address_visibility: 1,
|
|
add_custom_emoji_policy: 1,
|
|
create_public_stream_policy: 2,
|
|
create_private_stream_policy: 2,
|
|
};
|
|
assert.deepEqual(data, expected_value);
|
|
|
|
subsection = "user-defaults";
|
|
ev.currentTarget = `#org-submit-${CSS.escape(subsection)}`;
|
|
stubs = createSaveButtons(subsection);
|
|
$save_button = stubs.$save_button;
|
|
$save_button.attr("id", `org-submit-${subsection}`);
|
|
|
|
const $realm_default_language_elem = $("#id_realm_default_language");
|
|
$realm_default_language_elem.val("en");
|
|
$realm_default_language_elem.attr("id", "id_realm_default_language");
|
|
$realm_default_language_elem.data = () => "string";
|
|
|
|
$subsection_elem = $(`#org-${CSS.escape(subsection)}`);
|
|
$subsection_elem.closest = () => $subsection_elem;
|
|
$subsection_elem.set_find_results(".prop-element", [$realm_default_language_elem]);
|
|
|
|
submit_form(ev);
|
|
assert.ok(patched);
|
|
|
|
expected_value = {
|
|
default_language: "en",
|
|
};
|
|
assert.deepEqual(data, expected_value);
|
|
|
|
// Testing only once for since callback is same for all cases
|
|
success_callback();
|
|
assert.equal(stubs.props.hidden, true);
|
|
assert.equal($save_button.attr("data-status"), "saved");
|
|
assert.equal(stubs.$save_button_text.text(), "translated: Saved");
|
|
}
|
|
|
|
function test_change_save_button_state() {
|
|
const {$save_button_controls, $save_button_text, $save_button, $discard_button, props} =
|
|
createSaveButtons("msg-editing");
|
|
$save_button.attr("id", "org-submit-msg-editing");
|
|
|
|
{
|
|
settings_org.change_save_button_state($save_button_controls, "unsaved");
|
|
assert.equal($save_button_text.text(), "translated: Save changes");
|
|
assert.equal(props.hidden, false);
|
|
assert.equal($save_button.attr("data-status"), "unsaved");
|
|
assert.equal($discard_button.visible(), true);
|
|
}
|
|
{
|
|
settings_org.change_save_button_state($save_button_controls, "saved");
|
|
assert.equal($save_button_text.text(), "translated: Save changes");
|
|
assert.equal(props.hidden, true);
|
|
assert.equal($save_button.attr("data-status"), "");
|
|
}
|
|
{
|
|
settings_org.change_save_button_state($save_button_controls, "saving");
|
|
assert.equal($save_button_text.text(), "translated: Saving");
|
|
assert.equal($save_button.attr("data-status"), "saving");
|
|
assert.equal($save_button.hasClass("saving"), true);
|
|
assert.equal($discard_button.visible(), false);
|
|
}
|
|
{
|
|
settings_org.change_save_button_state($save_button_controls, "discarded");
|
|
assert.equal(props.hidden, true);
|
|
}
|
|
{
|
|
settings_org.change_save_button_state($save_button_controls, "succeeded");
|
|
assert.equal(props.hidden, true);
|
|
assert.equal($save_button.attr("data-status"), "saved");
|
|
assert.equal($save_button_text.text(), "translated: Saved");
|
|
}
|
|
{
|
|
settings_org.change_save_button_state($save_button_controls, "failed");
|
|
assert.equal(props.hidden, false);
|
|
assert.equal($save_button.attr("data-status"), "failed");
|
|
assert.equal($save_button_text.text(), "translated: Save changes");
|
|
}
|
|
}
|
|
|
|
function test_upload_realm_icon(override, upload_realm_logo_or_icon) {
|
|
const file_input = [{files: ["image1.png", "image2.png"]}];
|
|
|
|
let posted;
|
|
override(channel, "post", (req) => {
|
|
posted = true;
|
|
assert.equal(req.url, "/json/realm/icon");
|
|
assert.equal(req.data.csrfmiddlewaretoken, "token-stub");
|
|
assert.equal(req.data["file-0"], "image1.png");
|
|
assert.equal(req.data["file-1"], "image2.png");
|
|
});
|
|
|
|
upload_realm_logo_or_icon(file_input, null, true);
|
|
assert.ok(posted);
|
|
}
|
|
|
|
function test_extract_property_name() {
|
|
$("#id_realm_allow_message_editing").attr("id", "id_realm_allow_message_editing");
|
|
assert.equal(
|
|
settings_org.extract_property_name($("#id_realm_allow_message_editing")),
|
|
"realm_allow_message_editing",
|
|
);
|
|
|
|
$("#id_realm_message_content_edit_limit_minutes_label").attr(
|
|
"id",
|
|
"id_realm_message_content_edit_limit_minutes_label",
|
|
);
|
|
assert.equal(
|
|
settings_org.extract_property_name($("#id_realm_message_content_edit_limit_minutes_label")),
|
|
"realm_message_content_edit_limit_minutes_label",
|
|
);
|
|
|
|
$("#id-realm-allow-message-deleting").attr("id", "id-realm-allow-message-deleting");
|
|
assert.equal(
|
|
settings_org.extract_property_name($("#id-realm-allow-message-deleting")),
|
|
"realm_allow_message_deleting",
|
|
);
|
|
}
|
|
|
|
function test_sync_realm_settings() {
|
|
overlays.settings_open = () => true;
|
|
|
|
{
|
|
/* Test invalid settings property sync */
|
|
const $property_elem = $("#id_realm_invalid_settings_property");
|
|
$property_elem.attr("id", "id_realm_invalid_settings_property");
|
|
$property_elem.length = 1;
|
|
|
|
blueslip.expect(
|
|
"error",
|
|
"Element refers to unknown property realm_invalid_settings_property",
|
|
);
|
|
settings_org.sync_realm_settings("invalid_settings_property");
|
|
}
|
|
|
|
function test_common_policy(property_name) {
|
|
const $property_elem = $(`#id_realm_${CSS.escape(property_name)}`);
|
|
$property_elem.length = 1;
|
|
$property_elem.attr("id", `id_realm_${CSS.escape(property_name)}`);
|
|
|
|
/* Each policy is initialized to 'by_members' and then all the values are tested
|
|
in the following order - by_admins_only, by_moderators_only, by_full_members,
|
|
by_members. */
|
|
|
|
page_params[`realm_${property_name}`] =
|
|
settings_config.common_policy_values.by_members.code;
|
|
$property_elem.val(settings_config.common_policy_values.by_members.code);
|
|
|
|
for (const policy_value of Array.from(
|
|
Object.values(settings_config.common_policy_values),
|
|
)) {
|
|
page_params[`realm_${property_name}`] = policy_value.code;
|
|
settings_org.sync_realm_settings(property_name);
|
|
assert.equal($property_elem.val(), policy_value.code);
|
|
}
|
|
}
|
|
|
|
test_common_policy("create_private_stream_policy");
|
|
test_common_policy("create_public_stream_policy");
|
|
test_common_policy("invite_to_stream_policy");
|
|
test_common_policy("invite_to_realm_policy");
|
|
|
|
{
|
|
/* Test message content edit limit minutes sync */
|
|
const $property_elem = $("#id_realm_message_content_edit_limit_minutes");
|
|
$property_elem.length = 1;
|
|
$property_elem.attr("id", "id_realm_message_content_edit_limit_minutes");
|
|
|
|
page_params.realm_create_public_stream_policy = 1;
|
|
page_params.realm_message_content_edit_limit_seconds = 120;
|
|
|
|
settings_org.sync_realm_settings("message_content_edit_limit_seconds");
|
|
assert.equal($("#id_realm_message_content_edit_limit_minutes").val(), "2");
|
|
}
|
|
|
|
{
|
|
/* Test message content edit limit dropdown value sync */
|
|
const $property_elem = $("#id_realm_msg_edit_limit_setting");
|
|
$property_elem.length = 1;
|
|
$property_elem.attr("id", "id_realm_msg_edit_limit_setting");
|
|
|
|
page_params.realm_allow_message_editing = false;
|
|
page_params.realm_message_content_edit_limit_seconds = 120;
|
|
settings_org.sync_realm_settings("allow_message_editing");
|
|
assert.equal($("#id_realm_msg_edit_limit_setting").val(), "never");
|
|
|
|
page_params.realm_allow_message_editing = true;
|
|
|
|
page_params.realm_message_content_edit_limit_seconds = 120;
|
|
settings_org.sync_realm_settings("allow_message_editing");
|
|
assert.equal($("#id_realm_msg_edit_limit_setting").val(), "upto_two_min");
|
|
|
|
page_params.realm_message_content_edit_limit_seconds = 130;
|
|
settings_org.sync_realm_settings("allow_message_editing");
|
|
assert.equal($("#id_realm_msg_edit_limit_setting").val(), "custom_limit");
|
|
}
|
|
|
|
{
|
|
/* Test message content edit limit minutes sync */
|
|
const $property_elem = $("#id_realm_message_content_edit_limit_minutes");
|
|
$property_elem.length = 1;
|
|
$property_elem.attr("id", "id_realm_message_content_edit_limit_minutes");
|
|
|
|
page_params.realm_create_public_stream_policy = 1;
|
|
page_params.realm_message_content_edit_limit_seconds = 120;
|
|
|
|
settings_org.sync_realm_settings("message_content_edit_limit_seconds");
|
|
assert.equal($("#id_realm_message_content_edit_limit_minutes").val(), "2");
|
|
}
|
|
|
|
{
|
|
/* Test organization joining restrictions settings sync */
|
|
const $property_elem = $("#id_realm_org_join_restrictions");
|
|
$property_elem.length = 1;
|
|
$property_elem.attr("id", "id_realm_org_join_restrictions");
|
|
|
|
page_params.realm_emails_restricted_to_domains = true;
|
|
page_params.realm_disallow_disposable_email_addresses = false;
|
|
settings_org.sync_realm_settings("emails_restricted_to_domains");
|
|
assert.equal($("#id_realm_org_join_restrictions").val(), "only_selected_domain");
|
|
|
|
page_params.realm_emails_restricted_to_domains = false;
|
|
|
|
page_params.realm_disallow_disposable_email_addresses = true;
|
|
settings_org.sync_realm_settings("emails_restricted_to_domains");
|
|
assert.equal($("#id_realm_org_join_restrictions").val(), "no_disposable_email");
|
|
|
|
page_params.realm_disallow_disposable_email_addresses = false;
|
|
settings_org.sync_realm_settings("emails_restricted_to_domains");
|
|
assert.equal($("#id_realm_org_join_restrictions").val(), "no_restriction");
|
|
}
|
|
}
|
|
|
|
function test_parse_time_limit() {
|
|
const $elem = $("#id_realm_message_content_edit_limit_minutes");
|
|
const test_function = (value, expected_value = value) => {
|
|
$elem.val(value);
|
|
page_params.realm_message_content_edit_limit_seconds = settings_org.parse_time_limit($elem);
|
|
assert.equal(
|
|
settings_org.get_realm_time_limits_in_minutes(
|
|
"realm_message_content_edit_limit_seconds",
|
|
),
|
|
expected_value,
|
|
);
|
|
};
|
|
|
|
test_function("0.01", "0");
|
|
test_function("0.1");
|
|
test_function("0.122", "0.1");
|
|
test_function("0.155", "0.2");
|
|
test_function("0.150", "0.1");
|
|
test_function("0.5");
|
|
test_function("1");
|
|
test_function("1.1");
|
|
test_function("10.5");
|
|
test_function("50.3");
|
|
test_function("100");
|
|
test_function("100.1");
|
|
test_function("127.79", "127.8");
|
|
test_function("201.1");
|
|
test_function("501.15", "501.1");
|
|
test_function("501.34", "501.3");
|
|
}
|
|
|
|
function test_discard_changes_button(discard_changes) {
|
|
const ev = {
|
|
preventDefault: noop,
|
|
stopPropagation: noop,
|
|
target: "#org-discard-msg-editing",
|
|
};
|
|
|
|
page_params.realm_allow_edit_history = true;
|
|
page_params.realm_edit_topic_policy =
|
|
settings_config.common_message_policy_values.by_everyone.code;
|
|
page_params.realm_allow_message_editing = true;
|
|
page_params.realm_message_content_edit_limit_seconds = 3600;
|
|
page_params.realm_delete_own_message_policy =
|
|
settings_config.common_message_policy_values.by_everyone.code;
|
|
page_params.realm_message_content_delete_limit_seconds = 120;
|
|
|
|
const $allow_edit_history = $("#id_realm_allow_edit_history").prop("checked", false);
|
|
const $edit_topic_policy = $("#id_realm_edit_topic_policy").val(
|
|
settings_config.common_message_policy_values.by_admins_only.code,
|
|
);
|
|
const $msg_edit_limit_setting = $("#id_realm_msg_edit_limit_setting").val("custom_limit");
|
|
const $message_content_edit_limit_minutes = $(
|
|
"#id_realm_message_content_edit_limit_minutes",
|
|
).val(130);
|
|
const $msg_delete_limit_setting = $("#id_realm_msg_delete_limit_setting").val("custom_limit");
|
|
const $message_content_delete_limit_minutes = $(
|
|
"#id_realm_message_content_delete_limit_minutes",
|
|
).val(130);
|
|
|
|
$allow_edit_history.attr("id", "id_realm_allow_edit_history");
|
|
$msg_edit_limit_setting.attr("id", "id_realm_msg_edit_limit_setting");
|
|
$msg_delete_limit_setting.attr("id", "id_realm_msg_delete_limit_setting");
|
|
$edit_topic_policy.attr("id", "id_realm_edit_topic_policy");
|
|
$message_content_edit_limit_minutes.attr("id", "id_realm_message_content_edit_limit_minutes");
|
|
$message_content_delete_limit_minutes.attr(
|
|
"id",
|
|
"id_realm_message_content_delete_limit_minutes",
|
|
);
|
|
|
|
const $discard_button_parent = $(".org-subsection-parent");
|
|
$discard_button_parent.find = () => [
|
|
$allow_edit_history,
|
|
$msg_edit_limit_setting,
|
|
$msg_delete_limit_setting,
|
|
$edit_topic_policy,
|
|
$message_content_edit_limit_minutes,
|
|
$message_content_delete_limit_minutes,
|
|
];
|
|
|
|
const {$discard_button, props} = createSaveButtons("msg-editing");
|
|
$discard_button.closest = (selector) => $(selector);
|
|
|
|
discard_changes(ev);
|
|
|
|
assert.equal($allow_edit_history.prop("checked"), true);
|
|
assert.equal(
|
|
$edit_topic_policy.val(),
|
|
settings_config.common_message_policy_values.by_everyone.code,
|
|
);
|
|
assert.equal($msg_edit_limit_setting.val(), "upto_one_hour");
|
|
assert.equal($message_content_edit_limit_minutes.val(), "60");
|
|
assert.equal($msg_delete_limit_setting.val(), "upto_two_min");
|
|
assert.equal($message_content_delete_limit_minutes.val(), "2");
|
|
assert.ok(props.hidden);
|
|
}
|
|
|
|
test("set_up", ({override, override_rewire}) => {
|
|
page_params.realm_available_video_chat_providers = {
|
|
jitsi_meet: {
|
|
id: 1,
|
|
name: "Jitsi Meet",
|
|
},
|
|
zoom: {
|
|
id: 3,
|
|
name: "Zoom",
|
|
},
|
|
big_blue_button: {
|
|
id: 4,
|
|
name: "BigBlueButton",
|
|
},
|
|
};
|
|
|
|
let upload_realm_logo_or_icon;
|
|
realm_icon.build_realm_icon_widget = (f) => {
|
|
upload_realm_logo_or_icon = f;
|
|
};
|
|
|
|
override_rewire(dropdown_list_widget, "DropdownListWidget", () => ({
|
|
setup: noop,
|
|
render: noop,
|
|
update: noop,
|
|
}));
|
|
$("#id_realm_message_content_edit_limit_minutes").set_parent(
|
|
$.create("<stub edit limit parent>"),
|
|
);
|
|
$("#id_realm_message_content_delete_limit_minutes").set_parent(
|
|
$.create("<stub delete limit parent>"),
|
|
);
|
|
$("#id_realm_message_retention_days").set_parent($.create("<stub retention period parent>"));
|
|
$("#message_content_in_email_notifications_label").set_parent(
|
|
$.create("<stub in-content setting checkbox>"),
|
|
);
|
|
$("#enable_digest_emails_label").set_parent($.create("<stub digest setting checkbox>"));
|
|
$("#id_realm_digest_weekday").set_parent($.create("<stub digest weekday setting dropdown>"));
|
|
$("#allowed_domains_label").set_parent($.create("<stub-allowed-domain-label-parent>"));
|
|
const $waiting_period_parent_elem = $.create("waiting-period-parent-stub");
|
|
$("#id_realm_waiting_period_threshold").set_parent($waiting_period_parent_elem);
|
|
$("#id_realm_create_web_public_stream_policy").set_parent(
|
|
$.create("<stub-create-web-public-stream-policy-parent>"),
|
|
);
|
|
|
|
// TEST set_up() here, but this mostly just allows us to
|
|
// get access to the click handlers.
|
|
override(page_params, "is_owner", true);
|
|
settings_org.set_up();
|
|
|
|
test_submit_settings_form(
|
|
override,
|
|
$(".admin-realm-form").get_on_handler(
|
|
"click",
|
|
".subsection-header .subsection-changes-save button",
|
|
),
|
|
);
|
|
test_upload_realm_icon(override, upload_realm_logo_or_icon);
|
|
test_extract_property_name();
|
|
test_change_save_button_state();
|
|
test_sync_realm_settings();
|
|
test_parse_time_limit();
|
|
test_discard_changes_button(
|
|
$(".admin-realm-form").get_on_handler(
|
|
"click",
|
|
".subsection-header .subsection-changes-discard button",
|
|
),
|
|
);
|
|
});
|
|
|
|
test("test get_organization_settings_options", () => {
|
|
const sorted_option_values = settings_org.get_organization_settings_options();
|
|
const sorted_common_policy_values = sorted_option_values.common_policy_values;
|
|
const expected_common_policy_values = [
|
|
{
|
|
key: "by_admins_only",
|
|
order: 1,
|
|
code: 2,
|
|
description: $t({defaultMessage: "Admins"}),
|
|
},
|
|
{
|
|
key: "by_moderators_only",
|
|
order: 2,
|
|
code: 4,
|
|
description: $t({defaultMessage: "Admins and moderators"}),
|
|
},
|
|
{
|
|
key: "by_full_members",
|
|
order: 3,
|
|
code: 3,
|
|
description: $t({defaultMessage: "Admins, moderators and full members"}),
|
|
},
|
|
{
|
|
key: "by_members",
|
|
order: 4,
|
|
code: 1,
|
|
description: $t({defaultMessage: "Admins, moderators and members"}),
|
|
},
|
|
];
|
|
assert.deepEqual(sorted_common_policy_values, expected_common_policy_values);
|
|
});
|
|
|
|
test("test get_sorted_options_list", () => {
|
|
const option_values_1 = {
|
|
by_admins_only: {
|
|
order: 3,
|
|
code: 2,
|
|
description: $t({defaultMessage: "Admins"}),
|
|
},
|
|
by_members: {
|
|
order: 2,
|
|
code: 1,
|
|
description: $t({defaultMessage: "Admins, moderators and members"}),
|
|
},
|
|
by_full_members: {
|
|
order: 1,
|
|
code: 3,
|
|
description: $t({defaultMessage: "Admins, moderators and full members"}),
|
|
},
|
|
};
|
|
let expected_option_values = [
|
|
{
|
|
key: "by_full_members",
|
|
order: 1,
|
|
code: 3,
|
|
description: $t({defaultMessage: "Admins, moderators and full members"}),
|
|
},
|
|
{
|
|
key: "by_members",
|
|
order: 2,
|
|
code: 1,
|
|
description: $t({defaultMessage: "Admins, moderators and members"}),
|
|
},
|
|
{
|
|
key: "by_admins_only",
|
|
order: 3,
|
|
code: 2,
|
|
description: $t({defaultMessage: "Admins"}),
|
|
},
|
|
];
|
|
assert.deepEqual(settings_org.get_sorted_options_list(option_values_1), expected_option_values);
|
|
|
|
const option_values_2 = {
|
|
by_admins_only: {
|
|
code: 1,
|
|
description: $t({defaultMessage: "Admins"}),
|
|
},
|
|
by_members: {
|
|
code: 2,
|
|
description: $t({defaultMessage: "Admins, moderators and members"}),
|
|
},
|
|
by_full_members: {
|
|
code: 3,
|
|
description: $t({defaultMessage: "Admins, moderators and full members"}),
|
|
},
|
|
};
|
|
expected_option_values = [
|
|
{
|
|
key: "by_admins_only",
|
|
code: 1,
|
|
description: $t({defaultMessage: "Admins"}),
|
|
},
|
|
{
|
|
key: "by_full_members",
|
|
code: 3,
|
|
description: $t({defaultMessage: "Admins, moderators and full members"}),
|
|
},
|
|
{
|
|
key: "by_members",
|
|
code: 2,
|
|
description: $t({defaultMessage: "Admins, moderators and members"}),
|
|
},
|
|
];
|
|
assert.deepEqual(settings_org.get_sorted_options_list(option_values_2), expected_option_values);
|
|
});
|
|
|
|
test("misc", ({override_rewire}) => {
|
|
page_params.is_admin = false;
|
|
|
|
const $stub_notification_disable_parent = $.create("<stub notification_disable parent");
|
|
$stub_notification_disable_parent.set_find_results(
|
|
".dropdown_list_reset_button",
|
|
$.create("<disable link>"),
|
|
);
|
|
|
|
page_params.realm_name_changes_disabled = false;
|
|
page_params.server_name_changes_disabled = false;
|
|
settings_account.update_name_change_display();
|
|
assert.ok(!$("#full_name").prop("disabled"));
|
|
assert.equal($(".change_name_tooltip").is(":visible"), false);
|
|
|
|
page_params.realm_name_changes_disabled = true;
|
|
page_params.server_name_changes_disabled = false;
|
|
settings_account.update_name_change_display();
|
|
assert.ok($("#full_name").prop("disabled"));
|
|
assert.ok($(".change_name_tooltip").is(":visible"));
|
|
|
|
page_params.realm_name_changes_disabled = true;
|
|
page_params.server_name_changes_disabled = true;
|
|
settings_account.update_name_change_display();
|
|
assert.ok($("#full_name").prop("disabled"));
|
|
assert.ok($(".change_name_tooltip").is(":visible"));
|
|
|
|
page_params.realm_name_changes_disabled = false;
|
|
page_params.server_name_changes_disabled = true;
|
|
settings_account.update_name_change_display();
|
|
assert.ok($("#full_name").prop("disabled"));
|
|
assert.ok($(".change_name_tooltip").is(":visible"));
|
|
|
|
page_params.realm_email_changes_disabled = false;
|
|
settings_account.update_email_change_display();
|
|
assert.ok(!$("#change_email").prop("disabled"));
|
|
|
|
page_params.realm_email_changes_disabled = true;
|
|
settings_account.update_email_change_display();
|
|
assert.ok($("#change_email").prop("disabled"));
|
|
|
|
page_params.realm_avatar_changes_disabled = false;
|
|
page_params.server_avatar_changes_disabled = false;
|
|
settings_account.update_avatar_change_display();
|
|
assert.ok($("#user-avatar-upload-widget .image_upload_button").is(":visible"));
|
|
page_params.realm_avatar_changes_disabled = true;
|
|
page_params.server_avatar_changes_disabled = false;
|
|
settings_account.update_avatar_change_display();
|
|
assert.ok(!$("#user-avatar-upload-widget .image_upload_button").is(":visible"));
|
|
page_params.realm_avatar_changes_disabled = false;
|
|
page_params.server_avatar_changes_disabled = true;
|
|
settings_account.update_avatar_change_display();
|
|
assert.ok(!$("#user-avatar-upload-widget .image_upload_button").is(":visible"));
|
|
page_params.realm_avatar_changes_disabled = true;
|
|
page_params.server_avatar_changes_disabled = true;
|
|
settings_account.update_avatar_change_display();
|
|
assert.ok(!$("#user-avatar-upload-widget .image_upload_button").is(":visible"));
|
|
|
|
// If organization admin, these UI elements are never disabled.
|
|
page_params.is_admin = true;
|
|
settings_account.update_name_change_display();
|
|
assert.ok(!$("#full_name").prop("disabled"));
|
|
assert.equal($(".change_name_tooltip").is(":visible"), false);
|
|
|
|
settings_account.update_email_change_display();
|
|
assert.ok(!$("#change_email").prop("disabled"));
|
|
|
|
override_rewire(stream_settings_data, "get_streams_for_settings_page", () => [
|
|
{name: "some_stream", stream_id: 75},
|
|
{name: "some_stream", stream_id: 42},
|
|
]);
|
|
|
|
// Set stubs for dropdown_list_widget:
|
|
const widget_settings = [
|
|
"realm_notifications_stream_id",
|
|
"realm_signup_notifications_stream_id",
|
|
"realm_default_code_block_language",
|
|
];
|
|
const $dropdown_list_parent = $.create("<list parent>");
|
|
$dropdown_list_parent.set_find_results(
|
|
".dropdown_list_reset_button",
|
|
$.create("<disable button>"),
|
|
);
|
|
for (const name of widget_settings) {
|
|
const $elem = $.create(`#${CSS.escape(name)}_widget #${CSS.escape(name)}_name`);
|
|
$elem.closest = () => $dropdown_list_parent;
|
|
}
|
|
|
|
// We do not define any settings we need in page_params yet, but we don't need to for this test.
|
|
blueslip.expect(
|
|
"warn",
|
|
"dropdown-list-widget: Called without a default value; using null value",
|
|
3,
|
|
);
|
|
settings_org.init_dropdown_widgets();
|
|
|
|
let setting_name = "realm_notifications_stream_id";
|
|
let $elem = $(`#${CSS.escape(setting_name)}_widget #${CSS.escape(setting_name)}_name`);
|
|
$elem.closest = () => $stub_notification_disable_parent;
|
|
settings_org.notifications_stream_widget.render(42);
|
|
assert.equal($elem.text(), "#some_stream");
|
|
assert.ok(!$elem.hasClass("text-warning"));
|
|
|
|
settings_org.notifications_stream_widget.render(undefined);
|
|
assert.equal($elem.text(), "translated: Disabled");
|
|
assert.ok($elem.hasClass("text-warning"));
|
|
|
|
setting_name = "realm_signup_notifications_stream_id";
|
|
$elem = $(`#${CSS.escape(setting_name)}_widget #${CSS.escape(setting_name)}_name`);
|
|
$elem.closest = () => $stub_notification_disable_parent;
|
|
settings_org.signup_notifications_stream_widget.render(75);
|
|
assert.equal($elem.text(), "#some_stream");
|
|
assert.ok(!$elem.hasClass("text-warning"));
|
|
|
|
settings_org.signup_notifications_stream_widget.render(undefined);
|
|
assert.equal($elem.text(), "translated: Disabled");
|
|
assert.ok($elem.hasClass("text-warning"));
|
|
});
|