mirror of https://github.com/zulip/zulip.git
198 lines
5.7 KiB
JavaScript
198 lines
5.7 KiB
JavaScript
"use strict";
|
|
|
|
const {strict: assert} = require("assert");
|
|
|
|
const {mock_cjs, mock_esm, set_global, zrequire} = require("../zjsunit/namespace");
|
|
const {run_test} = require("../zjsunit/test");
|
|
const $ = require("../zjsunit/zjquery");
|
|
|
|
const page_params = set_global("page_params", {
|
|
realm_uri: "https://chat.example.com",
|
|
realm_embedded_bots: [
|
|
{name: "converter", config: {}},
|
|
{name: "giphy", config: {key: "12345678"}},
|
|
{name: "foobot", config: {bar: "baz", qux: "quux"}},
|
|
],
|
|
});
|
|
|
|
const bot_data_params = {
|
|
realm_bots: [
|
|
{
|
|
api_key: "QadL788EkiottHmukyhHgePUFHREiu8b",
|
|
email: "error-bot@zulip.org",
|
|
full_name: "Error bot",
|
|
user_id: 1,
|
|
services: [],
|
|
},
|
|
],
|
|
};
|
|
|
|
mock_cjs("jquery", $);
|
|
const avatar = mock_esm("../../static/js/avatar");
|
|
|
|
function ClipboardJS(sel) {
|
|
assert.equal(sel, "#copy_zuliprc");
|
|
}
|
|
mock_cjs("clipboard", ClipboardJS);
|
|
|
|
const bot_data = zrequire("bot_data");
|
|
const settings_bots = zrequire("settings_bots");
|
|
|
|
bot_data.initialize(bot_data_params);
|
|
|
|
run_test("generate_zuliprc_uri", () => {
|
|
const uri = settings_bots.generate_zuliprc_uri(1);
|
|
const expected =
|
|
"data:application/octet-stream;charset=utf-8," +
|
|
encodeURIComponent(
|
|
"[api]\nemail=error-bot@zulip.org\n" +
|
|
"key=QadL788EkiottHmukyhHgePUFHREiu8b\n" +
|
|
"site=https://chat.example.com\n",
|
|
);
|
|
|
|
assert.equal(uri, expected);
|
|
});
|
|
|
|
run_test("generate_zuliprc_content", () => {
|
|
const bot_user = bot_data.get(1);
|
|
const content = settings_bots.generate_zuliprc_content(bot_user);
|
|
const expected =
|
|
"[api]\nemail=error-bot@zulip.org\n" +
|
|
"key=QadL788EkiottHmukyhHgePUFHREiu8b\n" +
|
|
"site=https://chat.example.com\n";
|
|
|
|
assert.equal(content, expected);
|
|
});
|
|
|
|
run_test("generate_botserverrc_content", () => {
|
|
const user = {
|
|
email: "vabstest-bot@zulip.com",
|
|
api_key: "nSlA0mUm7G42LP85lMv7syqFTzDE2q34",
|
|
};
|
|
const service = {
|
|
token: "abcd1234",
|
|
};
|
|
const content = settings_bots.generate_botserverrc_content(
|
|
user.email,
|
|
user.api_key,
|
|
service.token,
|
|
);
|
|
const expected =
|
|
"[]\nemail=vabstest-bot@zulip.com\n" +
|
|
"key=nSlA0mUm7G42LP85lMv7syqFTzDE2q34\n" +
|
|
"site=https://chat.example.com\n" +
|
|
"token=abcd1234\n";
|
|
|
|
assert.equal(content, expected);
|
|
});
|
|
|
|
function test_create_bot_type_input_box_toggle(f) {
|
|
const create_payload_url = $("#create_payload_url");
|
|
const payload_url_inputbox = $("#payload_url_inputbox");
|
|
const config_inputbox = $("#config_inputbox");
|
|
const EMBEDDED_BOT_TYPE = "4";
|
|
const OUTGOING_WEBHOOK_BOT_TYPE = "3";
|
|
const GENERIC_BOT_TYPE = "1";
|
|
|
|
$("#create_bot_type :selected").val(EMBEDDED_BOT_TYPE);
|
|
f();
|
|
assert(!create_payload_url.hasClass("required"));
|
|
assert(!payload_url_inputbox.visible());
|
|
assert($("#select_service_name").hasClass("required"));
|
|
assert($("#service_name_list").visible());
|
|
assert(config_inputbox.visible());
|
|
|
|
$("#create_bot_type :selected").val(OUTGOING_WEBHOOK_BOT_TYPE);
|
|
f();
|
|
assert(create_payload_url.hasClass("required"));
|
|
assert(payload_url_inputbox.visible());
|
|
assert(!config_inputbox.visible());
|
|
|
|
$("#create_bot_type :selected").val(GENERIC_BOT_TYPE);
|
|
f();
|
|
assert(!create_payload_url.hasClass("required"));
|
|
assert(!payload_url_inputbox.visible());
|
|
assert(!config_inputbox.visible());
|
|
}
|
|
|
|
run_test("test tab clicks", (override) => {
|
|
override($.validator, "addMethod", () => {});
|
|
|
|
$("#create_bot_form").validate = () => {};
|
|
|
|
$("#config_inputbox").children = () => {
|
|
const mock_children = {
|
|
hide: () => {},
|
|
};
|
|
return mock_children;
|
|
};
|
|
|
|
override(avatar, "build_bot_create_widget", () => {});
|
|
|
|
settings_bots.set_up();
|
|
|
|
test_create_bot_type_input_box_toggle(() => $("#create_bot_type").trigger("change"));
|
|
|
|
function click_on_tab(tab_elem) {
|
|
tab_elem.trigger("click");
|
|
}
|
|
|
|
const tabs = {
|
|
add: $("#bots_lists_navbar .add-a-new-bot-tab"),
|
|
active: $("#bots_lists_navbar .active-bots-tab"),
|
|
inactive: $("#bots_lists_navbar .inactive-bots-tab"),
|
|
};
|
|
|
|
$("#bots_lists_navbar .active").removeClass = (cls) => {
|
|
assert.equal(cls, "active");
|
|
for (const tab of Object.values(tabs)) {
|
|
tab.removeClass("active");
|
|
}
|
|
};
|
|
|
|
const forms = {
|
|
add: $("#add-a-new-bot-form"),
|
|
active: $("#active_bots_list"),
|
|
inactive: $("#inactive_bots_list"),
|
|
};
|
|
|
|
click_on_tab(tabs.add);
|
|
assert(tabs.add.hasClass("active"));
|
|
assert(!tabs.active.hasClass("active"));
|
|
assert(!tabs.inactive.hasClass("active"));
|
|
|
|
assert(forms.add.visible());
|
|
assert(!forms.active.visible());
|
|
assert(!forms.inactive.visible());
|
|
|
|
click_on_tab(tabs.active);
|
|
assert(!tabs.add.hasClass("active"));
|
|
assert(tabs.active.hasClass("active"));
|
|
assert(!tabs.inactive.hasClass("active"));
|
|
|
|
assert(!forms.add.visible());
|
|
assert(forms.active.visible());
|
|
assert(!forms.inactive.visible());
|
|
|
|
click_on_tab(tabs.inactive);
|
|
assert(!tabs.add.hasClass("active"));
|
|
assert(!tabs.active.hasClass("active"));
|
|
assert(tabs.inactive.hasClass("active"));
|
|
|
|
assert(!forms.add.visible());
|
|
assert(!forms.active.visible());
|
|
assert(forms.inactive.visible());
|
|
});
|
|
|
|
run_test("can_create_new_bots", () => {
|
|
page_params.is_admin = true;
|
|
assert(settings_bots.can_create_new_bots());
|
|
|
|
page_params.is_admin = false;
|
|
page_params.realm_bot_creation_policy = 1;
|
|
assert(settings_bots.can_create_new_bots());
|
|
|
|
page_params.realm_bot_creation_policy = 3;
|
|
assert(!settings_bots.can_create_new_bots());
|
|
});
|