Odoo18-Base/addons/im_livechat/static/tests/embed/livechat_session.test.js
2025-01-06 10:57:38 +07:00

121 lines
4.4 KiB
JavaScript

import { waitUntilSubscribe } from "@bus/../tests/bus_test_helpers";
import {
defineLivechatModels,
loadDefaultEmbedConfig,
} from "@im_livechat/../tests/livechat_test_helpers";
import {
click,
contains,
focus,
insertText,
onRpcBefore,
start,
startServer,
triggerHotkey,
} from "@mail/../tests/mail_test_helpers";
import { describe, expect, test } from "@odoo/hoot";
import { advanceTime } from "@odoo/hoot-mock";
import {
getService,
mountWithCleanup,
serverState,
withUser,
} from "@web/../tests/web_test_helpers";
import { LivechatButton } from "@im_livechat/embed/common/livechat_button";
import { rpc } from "@web/core/network/rpc";
import { queryFirst } from "@odoo/hoot-dom";
describe.current.tags("desktop");
defineLivechatModels();
test("Session is reset after failing to persist the channel", async () => {
await startServer();
await loadDefaultEmbedConfig();
onRpcBefore("/im_livechat/get_session", (args) => {
if (args.persisted) {
return false;
}
});
await start({ authenticateAs: false });
await mountWithCleanup(LivechatButton);
await click(".o-livechat-LivechatButton");
await insertText(".o-mail-Composer-input", "Hello World!");
triggerHotkey("Enter");
await contains(".o_notification", {
text: "No available collaborator, please try again later.",
});
await contains(".o-livechat-LivechatButton");
await advanceTime(LivechatButton.DEBOUNCE_DELAY + 10);
await click(".o-livechat-LivechatButton");
await contains(".o-mail-ChatWindow");
});
test("Fold state is saved on the server", async () => {
const pyEnv = await startServer();
await loadDefaultEmbedConfig();
await start({ authenticateAs: false });
await mountWithCleanup(LivechatButton);
await click(".o-livechat-LivechatButton");
await contains(".o-mail-Thread");
await insertText(".o-mail-Composer-input", "Hello World!");
triggerHotkey("Enter");
await contains(".o-mail-Message", { text: "Hello World!" });
const guestId = pyEnv.cookie.get("dgid");
let [member] = pyEnv["discuss.channel.member"].search_read([
["guest_id", "=", guestId],
["channel_id", "=", getService("im_livechat.livechat").thread.id],
]);
expect(member.fold_state).toBe("open");
await click(".o-mail-ChatWindow-header");
await contains(".o-mail-Thread", { count: 0 });
[member] = pyEnv["discuss.channel.member"].search_read([
["guest_id", "=", guestId],
["channel_id", "=", getService("im_livechat.livechat").thread.id],
]);
expect(member.fold_state).toBe("folded");
await click(".o-mail-ChatBubble");
});
test.tags("focus required");
test("Seen message is saved on the server", async () => {
const pyEnv = await startServer();
await loadDefaultEmbedConfig();
const userId = serverState.userId;
await start({ authenticateAs: false });
await mountWithCleanup(LivechatButton);
await click(".o-livechat-LivechatButton");
await contains(".o-mail-Thread");
await insertText(".o-mail-Composer-input", "Hello, I need help!");
triggerHotkey("Enter");
await contains(".o-mail-Message", { text: "Hello, I need help!" });
await waitUntilSubscribe();
const initialSeenMessageId =
getService("im_livechat.livechat").thread.selfMember.seen_message_id?.id;
queryFirst(".o-mail-Composer-input").blur();
await withUser(userId, () =>
rpc("/mail/message/post", {
post_data: {
body: "Hello World!",
message_type: "comment",
subtype_xmlid: "mail.mt_comment",
},
thread_id: getService("im_livechat.livechat").thread.id,
thread_model: "discuss.channel",
})
);
await contains(".o-mail-Thread-newMessage");
await contains(".o-mail-ChatWindow-counter", { text: "1" });
await focus(".o-mail-Composer-input");
await contains(".o-mail-ChatWindow-counter", { count: 0 });
const guestId = pyEnv.cookie.get("dgid");
const [member] = pyEnv["discuss.channel.member"].search_read([
["guest_id", "=", guestId],
["channel_id", "=", getService("im_livechat.livechat").thread.id],
]);
expect(initialSeenMessageId).not.toBe(member.seen_message_id[0]);
expect(getService("im_livechat.livechat").thread.selfMember.seen_message_id.id).toBe(
member.seen_message_id[0]
);
});