Odoo18-Base/addons/mail/static/tests/chat_window/chat_window_manager.test.js
2025-01-06 10:57:38 +07:00

124 lines
4.1 KiB
JavaScript

import {
assertSteps,
click,
contains,
defineMailModels,
onRpcBefore,
patchUiSize,
start,
startServer,
step,
} from "@mail/../tests/mail_test_helpers";
import { describe, test } from "@odoo/hoot";
import { Command, serverState } from "@web/../tests/web_test_helpers";
describe.current.tags("desktop");
defineMailModels();
test("chat window does not fetch messages if hidden", async () => {
const pyEnv = await startServer();
const [channeId1, channelId2, channelId3] = pyEnv["discuss.channel"].create([
{
channel_member_ids: [
Command.create({ fold_state: "open", partner_id: serverState.partnerId }),
],
},
{
channel_member_ids: [
Command.create({ fold_state: "open", partner_id: serverState.partnerId }),
],
},
{
channel_member_ids: [
Command.create({ fold_state: "open", partner_id: serverState.partnerId }),
],
},
]);
pyEnv["mail.message"].create([
{
body: "Orange",
res_id: channeId1,
message_type: "comment",
model: "discuss.channel",
},
{
body: "Apple",
res_id: channelId2,
message_type: "comment",
model: "discuss.channel",
},
{
body: "Banana",
res_id: channelId3,
message_type: "comment",
model: "discuss.channel",
},
]);
patchUiSize({ width: 900 }); // enough for 2 open chat windows max
onRpcBefore("/discuss/channel/messages", () => step("fetch_messages"));
await start();
await contains(".o-mail-ChatWindow", { count: 2 });
await contains(".o-mail-ChatBubble", { count: 1 });
// FIXME: expected ordering: Banana, Apple, Orange
await contains(".o-mail-Message-content", { text: "Banana" });
await contains(".o-mail-Message-content", { text: "Apple" });
await contains(".o-mail-Message-content", { count: 0, text: "Orange" });
await assertSteps(["fetch_messages", "fetch_messages"]);
});
test("click on hidden chat window should fetch its messages", async () => {
const pyEnv = await startServer();
const [channeId1, channelId2, channelId3] = pyEnv["discuss.channel"].create([
{
channel_member_ids: [
Command.create({ fold_state: "open", partner_id: serverState.partnerId }),
],
},
{
channel_member_ids: [
Command.create({ fold_state: "open", partner_id: serverState.partnerId }),
],
},
{
channel_member_ids: [
Command.create({ fold_state: "open", partner_id: serverState.partnerId }),
],
},
]);
pyEnv["mail.message"].create([
{
body: "Orange",
res_id: channeId1,
message_type: "comment",
model: "discuss.channel",
},
{
body: "Apple",
res_id: channelId2,
message_type: "comment",
model: "discuss.channel",
},
{
body: "Banana",
res_id: channelId3,
message_type: "comment",
model: "discuss.channel",
},
]);
patchUiSize({ width: 900 }); // enough for 2 open chat windows max
onRpcBefore("/discuss/channel/messages", () => step("fetch_messages"));
await start();
await contains(".o-mail-ChatWindow", { count: 2 });
await contains(".o-mail-ChatBubble", { count: 1 });
// FIXME: expected ordering: Banana, Apple, Orange
await contains(".o-mail-Message-content", { text: "Banana" });
await contains(".o-mail-Message-content", { text: "Apple" });
await contains(".o-mail-Message-content", { count: 0, text: "Orange" });
await assertSteps(["fetch_messages", "fetch_messages"]);
await click(".o-mail-ChatBubble");
await contains(".o-mail-Message-content", { text: "Orange" });
await contains(".o-mail-Message-content", { text: "Banana" });
await contains(".o-mail-Message", { count: 0, text: "Apple" });
await assertSteps(["fetch_messages"]);
});