mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
This is mostly a refactoring to break the unnecessary dependency of bot_data on settings_bots. This is a bit more than a refactoring, as I remove all the debounced calls to render bots during the initialization of bot_data. (The debouncing probably meant we only rendered once, but it was still needless work.) We don't need to explicitly render bots during bot_data.initialize(), which you can verify by loading "#settings/your-bots" as the home page. It was just an artifact of how add() was implemented. Note that for the **admin** screen, we did not and still do not do live updates for add/remove; we only do it for updates. Fixing that is out of the scope of this change. The code that was moved here affects **personal** bot settings. Note that the debounce code is quite fragile. See my code comment that explains it. I don't have time to go down the rabbit hole of a deep fix here. The puppeteer tests would fail without the debounce, even though I was able to eliminate the debounce in an earlier version of this fix and see good results during manual testing. (My testing may have just been on the "lucky" side of the race.) I created #17743 to address this problem.
173 lines
4.9 KiB
JavaScript
173 lines
4.9 KiB
JavaScript
"use strict";
|
|
|
|
const {strict: assert} = require("assert");
|
|
|
|
const {zrequire} = require("../zjsunit/namespace");
|
|
const {run_test} = require("../zjsunit/test");
|
|
|
|
const bot_data = zrequire("bot_data");
|
|
|
|
const people = zrequire("people");
|
|
|
|
const me = {
|
|
email: "me@zulip.com",
|
|
full_name: "Me Myself",
|
|
user_id: 2,
|
|
};
|
|
|
|
const fred = {
|
|
email: "fred@zulip.com",
|
|
full_name: "Fred Frederickson",
|
|
user_id: 3,
|
|
};
|
|
|
|
const bot_data_params = {
|
|
realm_bots: [
|
|
{email: "bot0@zulip.com", user_id: 42, full_name: "Bot 0", services: []},
|
|
{
|
|
email: "outgoingwebhook@zulip.com",
|
|
user_id: 314,
|
|
full_name: "Outgoing webhook",
|
|
services: [{base_url: "http://foo.com", interface: 1}],
|
|
},
|
|
],
|
|
};
|
|
|
|
function test(label, f) {
|
|
run_test(label, (override) => {
|
|
people.add_active_user(me);
|
|
people.initialize_current_user(me.user_id);
|
|
bot_data.initialize(bot_data_params);
|
|
// Our startup logic should have added Bot 0 from page_params.
|
|
assert.equal(bot_data.get(42).full_name, "Bot 0");
|
|
assert.equal(bot_data.get(314).full_name, "Outgoing webhook");
|
|
f(override);
|
|
});
|
|
}
|
|
|
|
test("test_basics", () => {
|
|
people.add_active_user(fred);
|
|
const test_bot = {
|
|
email: "bot1@zulip.com",
|
|
user_id: 43,
|
|
avatar_url: "",
|
|
full_name: "Bot 1",
|
|
services: [{base_url: "http://bar.com", interface: 1}],
|
|
extra: "Not in data",
|
|
};
|
|
|
|
const test_embedded_bot = {
|
|
email: "embedded-bot@zulip.com",
|
|
user_id: 143,
|
|
avatar_url: "",
|
|
full_name: "Embedded bot 1",
|
|
services: [{config_data: {key: "12345678"}, service_name: "giphy"}],
|
|
owner: "cordelia@zulip.com",
|
|
};
|
|
|
|
(function test_add() {
|
|
bot_data.add(test_bot);
|
|
|
|
const bot = bot_data.get(43);
|
|
const services = bot_data.get_services(43);
|
|
assert.equal("Bot 1", bot.full_name);
|
|
assert.equal("http://bar.com", services[0].base_url);
|
|
assert.equal(1, services[0].interface);
|
|
assert.equal(undefined, bot.extra);
|
|
})();
|
|
|
|
(function test_update() {
|
|
bot_data.add(test_bot);
|
|
|
|
let bot = bot_data.get(43);
|
|
assert.equal("Bot 1", bot.full_name);
|
|
bot_data.update(43, {
|
|
full_name: "New Bot 1",
|
|
services: [{interface: 2, base_url: "http://baz.com"}],
|
|
});
|
|
bot = bot_data.get(43);
|
|
const services = bot_data.get_services(43);
|
|
assert.equal("New Bot 1", bot.full_name);
|
|
assert.equal(2, services[0].interface);
|
|
assert.equal("http://baz.com", services[0].base_url);
|
|
|
|
const change_owner_event = {
|
|
owner_id: fred.user_id,
|
|
};
|
|
bot_data.update(43, change_owner_event);
|
|
|
|
bot = bot_data.get(43);
|
|
assert.equal(bot.owner_id, fred.user_id);
|
|
})();
|
|
|
|
(function test_embedded_bot_update() {
|
|
bot_data.add(test_embedded_bot);
|
|
const bot_id = 143;
|
|
const services = bot_data.get_services(bot_id);
|
|
assert.equal("12345678", services[0].config_data.key);
|
|
bot_data.update(bot_id, {services: [{config_data: {key: "87654321"}}]});
|
|
assert.equal("87654321", services[0].config_data.key);
|
|
})();
|
|
|
|
(function test_remove() {
|
|
let bot;
|
|
|
|
bot_data.add({...test_bot, is_active: true});
|
|
|
|
bot = bot_data.get(43);
|
|
assert.equal("Bot 1", bot.full_name);
|
|
assert(bot.is_active);
|
|
bot_data.deactivate(43);
|
|
bot = bot_data.get(43);
|
|
assert.equal(bot.is_active, false);
|
|
})();
|
|
|
|
(function test_all_user_ids() {
|
|
const all_ids = bot_data.all_user_ids();
|
|
all_ids.sort();
|
|
assert.deepEqual(all_ids, [143, 314, 42, 43]);
|
|
})();
|
|
|
|
(function test_delete() {
|
|
let bot;
|
|
|
|
bot_data.add({...test_bot, is_active: true});
|
|
|
|
bot = bot_data.get(43);
|
|
assert.equal("Bot 1", bot.full_name);
|
|
assert(bot.is_active);
|
|
bot_data.del(43);
|
|
bot = bot_data.get(43);
|
|
assert.equal(bot, undefined);
|
|
})();
|
|
|
|
(function test_get_editable() {
|
|
bot_data.add({...test_bot, user_id: 44, owner_id: me.user_id, is_active: true});
|
|
bot_data.add({
|
|
...test_bot,
|
|
user_id: 45,
|
|
email: "bot2@zulip.com",
|
|
owner_id: me.user_id,
|
|
is_active: true,
|
|
});
|
|
bot_data.add({
|
|
...test_bot,
|
|
user_id: 46,
|
|
email: "bot3@zulip.com",
|
|
owner_id: fred.user_id,
|
|
is_active: true,
|
|
});
|
|
|
|
const editable_bots = bot_data.get_editable().map((bot) => bot.email);
|
|
assert.deepEqual(["bot1@zulip.com", "bot2@zulip.com"], editable_bots);
|
|
})();
|
|
|
|
(function test_get_all_bots_for_current_user() {
|
|
const bots = bot_data.get_all_bots_for_current_user();
|
|
|
|
assert.equal(bots.length, 2);
|
|
assert.equal(bots[0].email, "bot1@zulip.com");
|
|
assert.equal(bots[1].email, "bot2@zulip.com");
|
|
})();
|
|
});
|