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

109 lines
4.0 KiB
JavaScript

import {
click,
contains,
defineMailModels,
openDiscuss,
start,
startServer,
} from "@mail/../tests/mail_test_helpers";
import { Persona } from "@mail/core/common/persona_model";
import { describe, test } from "@odoo/hoot";
import { Command, patchWithCleanup, serverState } from "@web/../tests/web_test_helpers";
describe.current.tags("desktop");
defineMailModels();
test("initially online", async () => {
const pyEnv = await startServer();
const partnerId = pyEnv["res.partner"].create({ name: "Demo", im_status: "online" });
const channelId = pyEnv["discuss.channel"].create({
channel_member_ids: [
Command.create({ partner_id: serverState.partnerId }),
Command.create({ partner_id: partnerId }),
],
channel_type: "chat",
});
await start();
await openDiscuss(channelId);
await contains(".o-mail-ImStatus i[title='Online']");
});
test("initially offline", async () => {
const pyEnv = await startServer();
const partnerId = pyEnv["res.partner"].create({ name: "Demo", im_status: "offline" });
const channelId = pyEnv["discuss.channel"].create({
channel_member_ids: [
Command.create({ partner_id: serverState.partnerId }),
Command.create({ partner_id: partnerId }),
],
channel_type: "chat",
});
await start();
await openDiscuss(channelId);
await contains(".o-mail-ImStatus i[title='Offline']");
});
test("initially away", async () => {
const pyEnv = await startServer();
const partnerId = pyEnv["res.partner"].create({ name: "Demo", im_status: "away" });
const channelId = pyEnv["discuss.channel"].create({
channel_member_ids: [
Command.create({ partner_id: serverState.partnerId }),
Command.create({ partner_id: partnerId }),
],
channel_type: "chat",
});
await start();
await openDiscuss(channelId);
await contains(".o-mail-ImStatus i[title='Idle']");
});
test("change icon on change partner im_status", async () => {
patchWithCleanup(Persona, { IM_STATUS_DEBOUNCE_DELAY: 0 });
const pyEnv = await startServer();
const channelId = pyEnv["discuss.channel"].create({
channel_member_ids: [Command.create({ partner_id: serverState.partnerId })],
channel_type: "chat",
});
pyEnv["res.partner"].write([serverState.partnerId], { im_status: "online" });
await start();
await openDiscuss(channelId);
await contains(".o-mail-ImStatus i[title='Online']");
pyEnv["res.partner"].write([serverState.partnerId], { im_status: "offline" });
pyEnv["bus.bus"]._sendone(serverState.partnerId, "bus.bus/im_status_updated", {
partner_id: serverState.partnerId,
im_status: "offline",
});
await contains(".o-mail-ImStatus i[title='Offline']");
pyEnv["res.partner"].write([serverState.partnerId], { im_status: "away" });
pyEnv["bus.bus"]._sendone(serverState.partnerId, "bus.bus/im_status_updated", {
partner_id: serverState.partnerId,
im_status: "away",
});
await contains(".o-mail-ImStatus i[title='Idle']");
pyEnv["res.partner"].write([serverState.partnerId], { im_status: "online" });
pyEnv["bus.bus"]._sendone(serverState.partnerId, "bus.bus/im_status_updated", {
partner_id: serverState.partnerId,
im_status: "online",
});
await contains(".o-mail-ImStatus i[title='Online']");
});
test("show im status in messaging menu preview of chat", async () => {
const pyEnv = await startServer();
const partnerId = pyEnv["res.partner"].create({ name: "Demo", im_status: "online" });
pyEnv["discuss.channel"].create({
channel_member_ids: [
Command.create({ partner_id: serverState.partnerId }),
Command.create({ partner_id: partnerId }),
],
channel_type: "chat",
});
await start();
await click(".o_menu_systray i[aria-label='Messages']");
await contains(".o-mail-NotificationItem", {
text: "Demo",
contains: ["i[aria-label='User is online']"],
});
});