Files
zulip/web/tests/bot_data.test.js
Sahil Batra bb15b2d708 users: Send "update" events when deactivating or reactivating users.
We now send "realm_user/update" (and "realm_bot/update" for bots)
events with "is_active" field when deactivating and reactivating
users, including bots.

We would want to use "remove" event for a user losing access
to another user for #10970, so it is better to use "update"
event for deactivation as we only update "is_active" field
in the user objects and the clients still have the data for
deactivated users.

Previously, we used to send "add" event for reactivation along
with complete user objects, but clients should have the data
for deactivated users as well, so an "update" event is enough
like we do when deactivating users.
2023-11-02 08:31:12 -07:00

239 lines
7.6 KiB
JavaScript

"use strict";
const {strict: assert} = require("assert");
const {zrequire} = require("./lib/namespace");
const {run_test} = require("./lib/test");
const bot_data = zrequire("bot_data");
const people = zrequire("people");
// Bot types and service bot types can be found
// in zerver/models.py - UserProfile Class or
// zever/openapi/zulip.yaml
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: [
{
api_key: "1234567890qwertyuioop",
avatar_url: "",
bot_type: 1, // DEFAULT_BOT
default_all_public_streams: true,
default_events_register_stream: "register stream 42",
default_sending_stream: "sending stream 42",
email: "bot0@zulip.com",
full_name: "Bot 0",
is_active: true,
owner_id: 4,
user_id: 42,
services: [],
extra: "This field should be ignored",
},
{
api_key: "1234567890zxcvbnm",
avatar_url: "",
bot_type: 3, // OUTGOING_WEBHOOK_BOT
default_all_public_streams: true,
default_events_register_stream: "register stream 314",
default_sending_stream: "sending stream 314",
email: "outgoingwebhook@zulip.com",
full_name: "Outgoing webhook",
is_active: true,
owner_id: 5,
user_id: 314,
services: [{base_url: "http://foo.com", interface: 1, token: "basictoken12345"}],
extra: "This field should be ignored",
},
],
};
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 = {
api_key: "qwertyuioop1234567890",
avatar_url: "",
bot_type: 1,
default_all_public_streams: true,
default_events_register_stream: "register stream 43",
default_sending_stream: "sending stream 43",
email: "bot1@zulip.com",
full_name: "Bot 1",
is_active: true,
owner_id: 6,
user_id: 43,
services: [
{
base_url: "http://bar.com",
interface: 1,
token: "some Bot 1 token",
},
],
extra: "This field should be ignored",
};
const test_embedded_bot = {
api_key: "zxcvbnm1234567890",
avatar_url: "",
bot_type: 4, // EMBEDDED_BOT
default_all_public_streams: true,
default_events_register_stream: "register stream 143",
default_sending_stream: "sending stream 143",
email: "embedded-bot@zulip.com",
full_name: "Embedded bot 1",
is_active: true,
owner_id: 7,
user_id: 143,
services: [
{
config_data: {key: "12345678"},
service_name: "giphy",
},
],
extra: "This field should be ignored",
};
(function test_add() {
bot_data.add(test_bot);
const bot = bot_data.get(43);
const services = bot_data.get_services(43);
assert.equal("qwertyuioop1234567890", bot.api_key);
assert.equal("", bot.avatar_url);
assert.equal(1, bot.bot_type);
assert.equal(true, bot.default_all_public_streams);
assert.equal("register stream 43", bot.default_events_register_stream);
assert.equal("sending stream 43", bot.default_sending_stream);
assert.equal("bot1@zulip.com", bot.email);
assert.equal("Bot 1", bot.full_name);
assert.equal(true, bot.is_active);
assert.equal(6, bot.owner_id);
assert.equal(43, bot.user_id);
assert.equal("http://bar.com", services[0].base_url);
assert.equal(1, services[0].interface);
assert.equal("some Bot 1 token", services[0].token);
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, {
...test_bot,
full_name: "New Bot 1",
services: [{interface: 2, base_url: "http://baz.com", token: "zxcvbnm1234567890"}],
});
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);
assert.equal("zxcvbnm1234567890", services[0].token);
const change_owner_event = {
owner_id: fred.user_id,
};
bot_data.update(43, {...test_bot, ...change_owner_event});
bot = bot_data.get(43);
assert.equal(bot.owner_id, fred.user_id);
bot_data.update(43, {...test_bot, is_active: false});
assert.ok(!bot_data.get(43).is_active);
bot_data.update(43, {...test_bot, is_active: true});
assert.ok(bot_data.get(43).is_active);
})();
(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, {
...test_embedded_bot,
services: [{config_data: {key: "87654321"}, service_name: "embedded bot service"}],
});
assert.equal("87654321", services[0].config_data.key);
assert.equal("embedded bot service", services[0].service_name);
})();
(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.ok(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");
})();
(function test_get_number_of_bots_owned_by_user() {
const bots_owned_by_user = bot_data.get_all_bots_owned_by_user(3);
assert.equal(bots_owned_by_user[0].email, "bot3@zulip.com");
})();
});