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

130 lines
5.2 KiB
JavaScript

import { start, startServer } from "@mail/../tests/mail_test_helpers";
import { assertSteps, click, contains, step } from "@mail/../tests/mail_test_helpers_contains";
import { beforeEach, describe, expect, test } from "@odoo/hoot";
import { mockDate } from "@odoo/hoot-mock";
import { defineTestMailModels } from "@test_mail/../tests/test_mail_test_helpers";
import { serializeDate, today } from "@web/core/l10n/dates";
import { user } from "@web/core/user";
import { patchWithCleanup } from "@web/../tests/web_test_helpers";
describe.current.tags("desktop");
defineTestMailModels();
// Avoid problem around midnight (Ex.: tomorrow activities become today activities when reaching midnight)
beforeEach(() => mockDate("2023-4-8 10:00:00", 0));
test("menu with no records", async () => {
await start();
await click(".o_menu_systray .dropdown-toggle:has(i[aria-label='Activities'])");
await contains(".o-mail-ActivityMenu", {
text: "Congratulations, you're done with your activities.",
});
});
test("do not show empty text when at least some future activities", async () => {
const tomorrow = today().plus({ days: 1 });
const pyEnv = await startServer();
const activityId = pyEnv["mail.test.activity"].create({});
pyEnv["mail.activity"].create([
{
date_deadline: serializeDate(tomorrow),
res_id: activityId,
res_model: "mail.test.activity",
},
]);
await start();
await click(".o_menu_systray .dropdown-toggle:has(i[aria-label='Activities'])");
await contains(".o-mail-ActivityMenu", {
count: 0,
text: "Congratulations, you're done with your activities.",
});
});
test("activity menu widget: activity menu with 2 models", async () => {
const tomorrow = today().plus({ days: 1 });
const yesterday = today().plus({ days: -1 });
const pyEnv = await startServer();
const partnerId = pyEnv["res.partner"].create({});
const activityIds = pyEnv["mail.test.activity"].create([{}, {}, {}, {}]);
pyEnv["mail.activity"].create([
{ res_id: partnerId, res_model: "res.partner", date_deadline: serializeDate(today()) },
{
res_id: activityIds[0],
res_model: "mail.test.activity",
date_deadline: serializeDate(today()),
},
{
date_deadline: serializeDate(tomorrow),
res_id: activityIds[1],
res_model: "mail.test.activity",
},
{
date_deadline: serializeDate(tomorrow),
res_id: activityIds[2],
res_model: "mail.test.activity",
},
{
date_deadline: serializeDate(yesterday),
res_id: activityIds[3],
res_model: "mail.test.activity",
},
]);
const env = await start();
await contains(".o_menu_systray i[aria-label='Activities']");
await contains(".o-mail-ActivityMenu-counter");
await contains(".o-mail-ActivityMenu-counter", { text: "5" });
const actionChecks = {
context: {
force_search_count: 1,
search_default_activities_overdue: 1,
search_default_activities_today: 1,
},
domain: [["activity_user_id", "=", user.userId]],
};
patchWithCleanup(env.services.action, {
doAction(action) {
Object.entries(actionChecks).forEach(([key, value]) => {
if (Array.isArray(value) || typeof value === "object") {
expect(action[key]).toEqual(value);
} else {
expect(action[key]).toBe(value);
}
});
step("do_action:" + action.name);
},
});
await click(".o_menu_systray i[aria-label='Activities']");
await contains(".o-mail-ActivityMenu");
await contains(".o-mail-ActivityMenu .o-mail-ActivityGroup", { count: 2 });
await contains(".o-mail-ActivityMenu .o-mail-ActivityGroup", {
contains: [
["div[name='activityTitle']", { text: "res.partner" }],
["span", { text: "0 Late" }],
["span", { text: "1 Today" }],
["span", { text: "0 Future" }],
],
});
await contains(".o-mail-ActivityMenu .o-mail-ActivityGroup", {
contains: [
["div[name='activityTitle']", { text: "mail.test.activity" }],
["span", { text: "1 Late" }],
["span", { text: "1 Today" }],
["span", { text: "2 Future" }],
],
});
actionChecks.res_model = "res.partner";
await click(".o-mail-ActivityMenu .o-mail-ActivityGroup", { text: "res.partner" });
await contains(".o-mail-ActivityMenu", { count: 0 });
await click(".o_menu_systray i[aria-label='Activities']");
actionChecks.res_model = "mail.test.activity";
await click(".o-mail-ActivityMenu .o-mail-ActivityGroup", { text: "mail.test.activity" });
await assertSteps(["do_action:res.partner", "do_action:mail.test.activity"]);
});
test("activity menu widget: close on messaging menu click", async () => {
await start();
await click(".o_menu_systray i[aria-label='Activities']");
await contains(".o-mail-ActivityMenu");
await click(".o_menu_systray i[aria-label='Messages']");
await contains(".o-mail-ActivityMenu", { count: 0 });
});