oca-ocb-mail/odoo-bringout-oca-ocb-im_livechat/im_livechat/static/tests/channel_join_leave.test.js
Ernad Husremovic daa394e8b0 19.0 vanilla
2026-03-09 09:31:39 +01:00

151 lines
6.1 KiB
JavaScript

import { Command, serverState } from "@web/../tests/web_test_helpers";
import { defineLivechatModels } from "@im_livechat/../tests/livechat_test_helpers";
import {
click,
contains,
openDiscuss,
setupChatHub,
start,
startServer,
triggerHotkey,
} from "@mail/../tests/mail_test_helpers";
import { describe, test } from "@odoo/hoot";
import { withGuest } from "@mail/../tests/mock_server/mail_mock_server";
import { rpc } from "@web/core/network/rpc";
import { serializeDate, today } from "@web/core/l10n/dates";
import { livechatLastAgentLeaveFromChatWindow } from "./im_livechat_shared_tests";
describe.current.tags("desktop");
defineLivechatModels();
test("from the discuss app", async () => {
const pyEnv = await startServer();
pyEnv["res.users"].write([serverState.userId], {
group_ids: pyEnv["res.groups"]
.search_read([["id", "=", serverState.groupLivechatId]])
.map(({ id }) => id),
});
const [guestId_1, guestId_2] = pyEnv["mail.guest"].create([
{ name: "guest_1" },
{ name: "guest_2" },
]);
const livechatChannelId = pyEnv["im_livechat.channel"].create({
name: "HR",
user_ids: [serverState.userId],
});
pyEnv["discuss.channel"].create([
{
channel_type: "livechat",
channel_member_ids: [
Command.create({
partner_id: serverState.partnerId,
livechat_member_type: "agent",
}),
Command.create({ guest_id: guestId_1, livechat_member_type: "visitor" }),
],
livechat_end_dt: false,
livechat_channel_id: livechatChannelId,
livechat_operator_id: serverState.partnerId,
create_uid: serverState.publicUserId,
},
{
channel_type: "livechat",
channel_member_ids: [
Command.create({
partner_id: serverState.partnerId,
livechat_member_type: "agent",
}),
Command.create({ guest_id: guestId_2, livechat_member_type: "visitor" }),
],
livechat_end_dt: serializeDate(today()),
livechat_channel_id: livechatChannelId,
livechat_operator_id: serverState.partnerId,
create_uid: serverState.publicUserId,
},
]);
await start();
await openDiscuss();
await contains(
".o-mail-DiscussSidebarCategory-livechat:has(:text('HR')) .fa-circle[title='You have joined this live chat channel']"
);
await click("[title='Leave HR']", {
parent: [".o-mail-DiscussSidebarCategory-livechat", { text: "HR" }],
});
await contains(
".o-mail-DiscussSidebarCategory-livechat:has(:text('HR')) .fa-circle[title='You have joined this live chat channel']",
{ count: 0 }
);
await click("[title='Join HR']", {
parent: [".o-mail-DiscussSidebarCategory-livechat", { text: "HR" }],
});
await contains(
".o-mail-DiscussSidebarCategory-livechat:has(:text('HR')) .fa-circle[title='You have joined this live chat channel']"
);
await click("[title='Chat Actions']", {
parent: [".o-mail-DiscussSidebarChannel", { text: "guest_1" }],
});
await click(".o-dropdown-item:contains('Leave Channel')");
await click("button:contains(Leave Conversation)");
await contains(".o-mail-DiscussSidebarChannel", { text: "guest_1", count: 0 });
await click("[title='Chat Actions']", {
parent: [".o-mail-DiscussSidebarChannel", { text: "guest_2" }],
});
await click(".o-dropdown-item:contains('Leave Channel')");
await contains(".o-mail-DiscussSidebarChannel", { text: "guest_2", count: 0 });
await click("[title='Leave HR']", {
parent: [".o-mail-DiscussSidebarCategory-livechat", { text: "HR" }],
});
await contains(".o-mail-DiscussSidebarCategory-livechat", { text: "HR", count: 0 });
});
test("from the command palette", async () => {
const pyEnv = await startServer();
pyEnv["res.users"].write([serverState.userId], {
group_ids: pyEnv["res.groups"]
.search_read([["id", "=", serverState.groupLivechatId]])
.map(({ id }) => id),
});
pyEnv["im_livechat.channel"].create({ name: "HR", user_ids: [serverState.userId] });
await start();
await triggerHotkey("control+k");
await click(".o_command", { text: "Leave HR" });
await contains(".o_notification", { text: "You left HR." });
await contains(".o_command", { text: "HR", count: 0 });
await triggerHotkey("control+k");
await click(".o_command", { text: "Join HR" });
await contains(".o_notification", { text: "You joined HR." });
});
test("from chat window", livechatLastAgentLeaveFromChatWindow);
test("visitor leaving ends the livechat conversation", async () => {
const pyEnv = await startServer();
pyEnv["res.users"].write([serverState.userId], {
group_ids: pyEnv["res.groups"]
.search_read([["id", "=", serverState.groupLivechatId]])
.map(({ id }) => id),
});
const guestId = pyEnv["mail.guest"].create({ name: "Visitor" });
const livechatChannelId = pyEnv["im_livechat.channel"].create({
name: "HR",
user_ids: [serverState.userId],
});
const channel_id = pyEnv["discuss.channel"].create({
channel_type: "livechat",
channel_member_ids: [
Command.create({ partner_id: serverState.partnerId, livechat_member_type: "agent" }),
Command.create({ guest_id: guestId, livechat_member_type: "visitor" }),
],
livechat_channel_id: livechatChannelId,
livechat_operator_id: serverState.partnerId,
create_uid: serverState.publicUserId,
});
setupChatHub({ opened: [channel_id] });
await start();
await contains(".o-mail-ChatWindow");
// simulate visitor leaving
await withGuest(guestId, () => rpc("/im_livechat/visitor_leave_session", { channel_id }));
await contains("span", { text: "This livechat conversation has ended" });
await click("button[title*='Close Chat Window']");
await contains(".o-mail-ChatWindow", { count: 0 });
});