mirror of
https://github.com/bringout/oca-ocb-mail.git
synced 2026-04-22 02:02:07 +02:00
167 lines
6.3 KiB
JavaScript
167 lines
6.3 KiB
JavaScript
import {
|
|
defineLivechatModels,
|
|
loadDefaultEmbedConfig,
|
|
} from "@im_livechat/../tests/livechat_test_helpers";
|
|
import { expirableStorage } from "@im_livechat/core/common/expirable_storage";
|
|
import {
|
|
click,
|
|
contains,
|
|
insertText,
|
|
listenStoreFetch,
|
|
onRpcBefore,
|
|
setupChatHub,
|
|
start,
|
|
startServer,
|
|
STORE_FETCH_ROUTES,
|
|
triggerHotkey,
|
|
userContext,
|
|
waitStoreFetch,
|
|
} from "@mail/../tests/mail_test_helpers";
|
|
import { describe, test } from "@odoo/hoot";
|
|
import {
|
|
asyncStep,
|
|
Command,
|
|
onRpc,
|
|
serverState,
|
|
waitForSteps,
|
|
} from "@web/../tests/web_test_helpers";
|
|
|
|
describe.current.tags("desktop");
|
|
defineLivechatModels();
|
|
|
|
test("persisted session history", async () => {
|
|
const pyEnv = await startServer();
|
|
const livechatChannelId = await loadDefaultEmbedConfig();
|
|
const guestId = pyEnv["mail.guest"].create({ name: "Visitor 11" });
|
|
const channelId = pyEnv["discuss.channel"].create({
|
|
channel_member_ids: [
|
|
Command.create({ partner_id: serverState.partnerId }),
|
|
Command.create({ guest_id: guestId }),
|
|
],
|
|
channel_type: "livechat",
|
|
livechat_channel_id: livechatChannelId,
|
|
livechat_operator_id: serverState.partnerId,
|
|
});
|
|
expirableStorage.setItem(
|
|
"im_livechat.saved_state",
|
|
JSON.stringify({
|
|
store: { "discuss.channel": [{ id: channelId }] },
|
|
persisted: true,
|
|
livechatUserId: serverState.publicUserId,
|
|
})
|
|
);
|
|
pyEnv["mail.message"].create({
|
|
author_id: serverState.partnerId,
|
|
body: "Old message in history",
|
|
res_id: channelId,
|
|
model: "discuss.channel",
|
|
message_type: "comment",
|
|
});
|
|
setupChatHub({ opened: [channelId] });
|
|
await start({
|
|
authenticateAs: { ...pyEnv["mail.guest"].read(guestId)[0], _name: "mail.guest" },
|
|
});
|
|
await contains(".o-mail-Message-content", { text: "Old message in history" });
|
|
});
|
|
|
|
test("previous operator prioritized", async () => {
|
|
const pyEnv = await startServer();
|
|
const livechatChannelId = await loadDefaultEmbedConfig();
|
|
const userId = pyEnv["res.users"].create({ name: "John Doe", im_status: "online" });
|
|
const previousOperatorId = pyEnv["res.partner"].create({
|
|
name: "John Doe",
|
|
user_ids: [userId],
|
|
});
|
|
pyEnv["im_livechat.channel"].write([livechatChannelId], { user_ids: [Command.link(userId)] });
|
|
expirableStorage.setItem("im_livechat_previous_operator", JSON.stringify(previousOperatorId));
|
|
await start({ authenticateAs: false });
|
|
await click(".o-livechat-LivechatButton");
|
|
await contains(".o-mail-Message-author", { text: "John Doe" });
|
|
});
|
|
|
|
test("Only necessary requests are made when creating a new chat", async () => {
|
|
const pyEnv = await startServer();
|
|
const livechatChannelId = await loadDefaultEmbedConfig();
|
|
const operatorPartnerId = serverState.partnerId;
|
|
onRpcBefore((route, args) => {
|
|
if (!route.includes("assets") && !STORE_FETCH_ROUTES.includes(route)) {
|
|
asyncStep(`${route} - ${JSON.stringify(args)}`);
|
|
}
|
|
});
|
|
listenStoreFetch(undefined, { logParams: ["init_livechat"] });
|
|
await start({ authenticateAs: false });
|
|
await contains(".o-livechat-LivechatButton");
|
|
await waitStoreFetch([
|
|
"failures", // called because mail/core/web is loaded in test bundle
|
|
"systray_get_activities", // called because mail/core/web is loaded in test bundle
|
|
"init_messaging",
|
|
["init_livechat", livechatChannelId],
|
|
]);
|
|
await click(".o-livechat-LivechatButton");
|
|
await contains(".o-mail-Message", { text: "Hello, how may I help you?" });
|
|
await waitForSteps([
|
|
`/im_livechat/get_session - ${JSON.stringify({
|
|
channel_id: livechatChannelId,
|
|
previous_operator_id: null,
|
|
persisted: false,
|
|
})}`,
|
|
]);
|
|
await insertText(".o-mail-Composer-input", "Hello!");
|
|
await waitForSteps([]);
|
|
await triggerHotkey("Enter");
|
|
await contains(".o-mail-Message", { text: "Hello!" });
|
|
const [threadId] = pyEnv["discuss.channel"].search([], { order: "id DESC" });
|
|
await waitStoreFetch(
|
|
[
|
|
"failures", // called because mail/core/web is loaded in test bundle
|
|
"systray_get_activities", // called because mail/core/web is loaded in test bundle
|
|
"init_messaging",
|
|
],
|
|
{
|
|
stepsBefore: [
|
|
`/im_livechat/get_session - ${JSON.stringify({
|
|
channel_id: livechatChannelId,
|
|
previous_operator_id: operatorPartnerId,
|
|
persisted: true,
|
|
})}`,
|
|
`/mail/message/post - ${JSON.stringify({
|
|
post_data: {
|
|
body: "Hello!",
|
|
email_add_signature: true,
|
|
message_type: "comment",
|
|
subtype_xmlid: "mail.mt_comment",
|
|
},
|
|
thread_id: threadId,
|
|
thread_model: "discuss.channel",
|
|
context: { ...userContext(), temporary_id: 0.8200000000000001 },
|
|
})}`,
|
|
],
|
|
}
|
|
);
|
|
});
|
|
|
|
test("do not create new thread when operator answers to visitor", async () => {
|
|
const pyEnv = await startServer();
|
|
const livechatChannelId = await loadDefaultEmbedConfig();
|
|
const guestId = pyEnv["mail.guest"].create({ name: "Visitor 11" });
|
|
onRpc("/im_livechat/get_session", async () => asyncStep("/im_livechat/get_session"));
|
|
onRpc("/mail/message/post", async () => asyncStep("/mail/message/post"));
|
|
const channelId = pyEnv["discuss.channel"].create({
|
|
channel_member_ids: [
|
|
Command.create({ partner_id: serverState.partnerId }),
|
|
Command.create({ guest_id: guestId }),
|
|
],
|
|
channel_type: "livechat",
|
|
livechat_channel_id: livechatChannelId,
|
|
livechat_operator_id: serverState.partnerId,
|
|
create_uid: serverState.publicUserId,
|
|
});
|
|
setupChatHub({ opened: [channelId] });
|
|
await start({
|
|
authenticateAs: pyEnv["res.users"].search_read([["id", "=", serverState.userId]])[0],
|
|
});
|
|
await insertText(".o-mail-Composer-input", "Hello!");
|
|
await triggerHotkey("Enter");
|
|
await contains(".o-mail-Message", { text: "Hello!" });
|
|
await waitForSteps(["/mail/message/post"]);
|
|
});
|