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

107 lines
4.0 KiB
JavaScript

import { waitNotifications } from "@bus/../tests/bus_test_helpers";
import { LivechatButton } from "@im_livechat/embed/common/livechat_button";
import { RATING } from "@im_livechat/embed/common/livechat_service";
import {
defineLivechatModels,
loadDefaultEmbedConfig,
} from "@im_livechat/../tests/livechat_test_helpers";
import { describe, expect, test } from "@odoo/hoot";
import {
assertSteps,
click,
contains,
insertText,
onRpcBefore,
start,
startServer,
step,
triggerHotkey,
} from "@mail/../tests/mail_test_helpers";
import { mountWithCleanup } from "@web/../tests/web_test_helpers";
describe.current.tags("desktop");
defineLivechatModels();
test("Do not ask feedback if empty", async () => {
await startServer();
await loadDefaultEmbedConfig();
await start({ authenticateAs: false });
await mountWithCleanup(LivechatButton);
await click(".o-livechat-LivechatButton");
await contains(".o-mail-ChatWindow");
await click("[title*='Close Chat Window']");
});
test("Close without feedback", async () => {
await startServer();
await loadDefaultEmbedConfig();
onRpcBefore((route) => {
if (route === "/im_livechat/visitor_leave_session") {
step(route);
}
if (route === "/im_livechat/feedback") {
step(route);
}
});
await start({ authenticateAs: false });
await mountWithCleanup(LivechatButton);
await click(".o-livechat-LivechatButton");
await contains(".o-mail-ChatWindow");
await insertText(".o-mail-Composer-input", "Hello World!");
triggerHotkey("Enter");
await contains(".o-mail-Message-content", { text: "Hello World!" });
await click("[title*='Close Chat Window']");
await click(".o-livechat-CloseConfirmation-leave");
await click("button", { text: "Close conversation" });
await contains(".o-livechat-LivechatButton");
await assertSteps(["/im_livechat/visitor_leave_session"]);
});
test("Feedback with rating and comment", async () => {
await startServer();
await loadDefaultEmbedConfig();
onRpcBefore((route, args) => {
if (route === "/im_livechat/visitor_leave_session") {
step(route);
}
if (route === "/im_livechat/feedback") {
step(route);
expect(args.reason.includes("Good job!")).toBe(true);
expect(args.rate).toBe(RATING.GOOD);
}
});
await start({ authenticateAs: false });
await mountWithCleanup(LivechatButton);
await click(".o-livechat-LivechatButton");
await contains(".o-mail-ChatWindow");
await insertText(".o-mail-Composer-input", "Hello World!");
triggerHotkey("Enter");
await contains(".o-mail-Message-content", { text: "Hello World!" });
await click("[title*='Close Chat Window']");
await click(".o-livechat-CloseConfirmation-leave");
await assertSteps(["/im_livechat/visitor_leave_session"]);
await click(`img[data-alt="${RATING.GOOD}"]`);
await insertText("textarea[placeholder='Explain your note']", "Good job!");
await click("button:contains(Send):enabled");
await contains("p", { text: "Thank you for your feedback" });
await assertSteps(["/im_livechat/feedback"]);
});
test("Closing folded chat window should open it with feedback", async () => {
await startServer();
await loadDefaultEmbedConfig();
const env = 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-mail-Message-content", { text: "Hello World!" });
await click("[title='Fold']");
await waitNotifications([env, "discuss.Thread/fold_state"]);
await click(".o-mail-ChatBubble");
await click("[title*='Close Chat Window']");
await click(".o-livechat-CloseConfirmation-leave");
await click(".o-mail-ChatHub-bubbleBtn");
await contains(".o-mail-ChatWindow p", { text: "Did we correctly answer your question?" });
});