import { beforeEach, describe, expect, test } from "@odoo/hoot";
import { queryFirst, queryAll } from "@odoo/hoot-dom";
import { mockDate, animationFrame } from "@odoo/hoot-mock";
import { markup } from "@odoo/owl";
import {
getService,
mountWithCleanup,
switchView,
toggleMenuItem,
toggleSearchBarMenu,
} from "@web/../tests/web_test_helpers";
import { Tasks, defineGanttModels } from "./gantt_mock_models";
import { SELECTORS, mountGanttView } from "./web_gantt_test_helpers";
import { Domain } from "@web/core/domain";
import { WebClient } from "@web/webclient/webclient";
describe.current.tags("desktop");
defineGanttModels();
beforeEach(() => mockDate("2018-12-20T08:00:00", +1));
test(`empty grouped gantt with sample="1"`, async () => {
Tasks._views = {
gantt: ``,
graph: ``,
search: ``,
};
await mountWithCleanup(WebClient);
await getService("action").doAction({
res_model: "tasks",
type: "ir.actions.act_window",
views: [
[false, "gantt"],
[false, "graph"],
],
domain: Domain.FALSE.toList(),
groupBy: ["project_id"],
});
await animationFrame();
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(queryAll(SELECTORS.pill).length).toBeWithin(0, 16);
expect(SELECTORS.noContentHelper).toHaveCount(1);
const content = queryFirst(SELECTORS.viewContent).innerHTML;
await switchView("gantt");
await animationFrame();
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(SELECTORS.viewContent).toHaveProperty("innerHTML", content);
expect(SELECTORS.noContentHelper).toHaveCount(1);
});
test("empty gantt with sample data and default_group_by", async () => {
Tasks._views = {
gantt: ``,
graph: ``,
search: ``,
};
await mountWithCleanup(WebClient);
await getService("action").doAction({
res_model: "tasks",
type: "ir.actions.act_window",
views: [
[false, "gantt"],
[false, "graph"],
],
domain: Domain.FALSE.toList(),
});
await animationFrame();
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(queryAll(SELECTORS.pill).length).toBeWithin(0, 16);
expect(SELECTORS.noContentHelper).toHaveCount(1);
const content = queryFirst(SELECTORS.viewContent).innerHTML;
await switchView("gantt");
await animationFrame();
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(SELECTORS.viewContent).toHaveProperty("innerHTML", content);
expect(SELECTORS.noContentHelper).toHaveCount(1);
});
test("empty gantt with sample data and default_group_by (switch view)", async () => {
Tasks._views = {
gantt: ``,
list: `
`,
search: ``,
};
await mountWithCleanup(WebClient);
await getService("action").doAction({
res_model: "tasks",
type: "ir.actions.act_window",
views: [
[false, "gantt"],
[false, "list"],
],
domain: Domain.FALSE.toList(),
});
await animationFrame();
// the gantt view should be in sample mode
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(queryAll(SELECTORS.pill).length).toBeWithin(0, 16);
expect(SELECTORS.noContentHelper).toHaveCount(1);
const content = queryFirst(SELECTORS.viewContent).innerHTML;
// switch to list view
await switchView("list");
expect(SELECTORS.view).toHaveCount(0);
// go back to gantt view
await switchView("gantt");
await animationFrame();
expect(SELECTORS.view).toHaveCount(1);
// the gantt view should be still in sample mode
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(SELECTORS.noContentHelper).toHaveCount(1);
expect(SELECTORS.viewContent).toHaveProperty("innerHTML", content);
});
test(`empty gantt with sample="1"`, async () => {
Tasks._views = {
gantt: ``,
graph: ``,
search: ``,
};
await mountWithCleanup(WebClient);
await getService("action").doAction({
res_model: "tasks",
type: "ir.actions.act_window",
views: [
[false, "gantt"],
[false, "graph"],
],
domain: Domain.FALSE.toList(),
});
await animationFrame();
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(queryAll(SELECTORS.pill).length).toBeWithin(0, 16);
expect(SELECTORS.noContentHelper).toHaveCount(1);
const content = queryFirst(SELECTORS.viewContent).innerHTML;
await switchView("gantt");
await animationFrame();
expect(SELECTORS.viewContent).toHaveClass("o_view_sample_data");
expect(SELECTORS.viewContent).toHaveProperty("innerHTML", content);
expect(SELECTORS.noContentHelper).toHaveCount(1);
});
test(`non empty gantt with sample="1"`, async () => {
await mountGanttView({
resModel: "tasks",
arch: ``,
searchViewArch: `
`,
});
expect(SELECTORS.viewContent).not.toHaveClass("o_view_sample_data");
expect(SELECTORS.cell).toHaveCount(12);
expect(SELECTORS.pill).toHaveCount(7);
expect(SELECTORS.noContentHelper).toHaveCount(0);
await toggleSearchBarMenu();
await toggleMenuItem("False Domain");
expect(SELECTORS.viewContent).not.toHaveClass("o_view_sample_data");
expect(SELECTORS.pill).toHaveCount(0);
expect(SELECTORS.noContentHelper).toHaveCount(0);
expect(SELECTORS.cell).toHaveCount(12);
});
test(`non empty grouped gantt with sample="1"`, async () => {
await mountGanttView({
resModel: "tasks",
arch: ``,
groupBy: ["project_id"],
searchViewArch: `
`,
});
expect(SELECTORS.viewContent).not.toHaveClass("o_view_sample_data");
expect(SELECTORS.cell).toHaveCount(24);
expect(SELECTORS.pill).toHaveCount(7);
await toggleSearchBarMenu();
await toggleMenuItem("False Domain");
expect(SELECTORS.viewContent).not.toHaveClass("o_view_sample_data");
expect(SELECTORS.pill).toHaveCount(0);
expect(SELECTORS.noContentHelper).toHaveCount(0);
expect(SELECTORS.cell).toHaveCount(12);
});
test("no content helper from action when no data and sample mode", async () => {
Tasks._records = [];
await mountGanttView({
resModel: "tasks",
arch: ``,
noContentHelp: markup(`
click to add a partner
`),
});
expect(SELECTORS.noContentHelper).toHaveCount(1);
expect(`${SELECTORS.noContentHelper} p.hello:contains(add a partner)`).toHaveCount(1);
});