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

156 lines
5.7 KiB
JavaScript

import { describe, expect, test } from "@odoo/hoot";
import { registries, constants } from "@odoo/o-spreadsheet";
import { selectCell, setCellContent } from "@spreadsheet/../tests/helpers/commands";
import { createModelWithDataSource } from "@spreadsheet/../tests/helpers/model";
import { doMenuAction } from "@spreadsheet/../tests/helpers/ui";
import { waitForDataLoaded } from "@spreadsheet/helpers/model";
import {
defineSpreadsheetAccountModels,
getAccountingData,
} from "@spreadsheet_account/../tests/accounting_test_data";
import { mockService } from "@web/../tests/web_test_helpers";
describe.current.tags("headless");
defineSpreadsheetAccountModels();
const { cellMenuRegistry } = registries;
const { DEFAULT_LOCALE } = constants;
const serverData = getAccountingData();
test("Create drill down domain", async () => {
const drillDownAction = {
type: "ir.actions.act_window",
res_model: "account.move.line",
view_mode: "list",
views: [[false, "list"]],
target: "current",
domain: [["account_id", "in", [1, 2]]],
name: "my awesome action",
};
const fakeActionService = {
doAction: async (action, options) => {
expect.step("drill down action");
expect(action).toEqual(drillDownAction);
expect(options).toBe(undefined);
return true;
},
};
mockService("action", fakeActionService);
const model = await createModelWithDataSource({
serverData,
mockRPC: async function (route, args) {
if (args.method === "spreadsheet_move_line_action") {
expect(args.args).toEqual([
{
codes: ["100"],
company_id: null,
include_unposted: false,
date_range: {
range_type: "year",
year: 2020,
},
},
]);
return drillDownAction;
}
},
});
const env = model.config.custom.env;
env.model = model;
setCellContent(model, "A1", `=ODOO.BALANCE("100", 2020)`);
setCellContent(model, "A2", `=ODOO.BALANCE("100", 0)`);
setCellContent(model, "A3", `=ODOO.BALANCE("100", 2020, , , FALSE)`);
setCellContent(model, "A4", `=ODOO.BALANCE("100", 2020, , , )`);
// Does not affect non formula cells
setCellContent(model, "A5", `5`);
await waitForDataLoaded(model);
selectCell(model, "A1");
const root = cellMenuRegistry
.getMenuItems()
.find((item) => item.id === "move_lines_see_records");
expect(root.isVisible(env)).toBe(true);
await root.execute(env);
expect.verifySteps(["drill down action"]);
selectCell(model, "A2");
expect(root.isVisible(env)).toBe(false);
selectCell(model, "A3");
expect(root.isVisible(env)).toBe(true);
await root.execute(env);
expect.verifySteps(["drill down action"]);
selectCell(model, "A4");
expect(root.isVisible(env)).toBe(true);
await root.execute(env);
expect.verifySteps(["drill down action"]);
selectCell(model, "A5");
expect(root.isVisible(env)).toBe(false);
});
test("Create drill down domain when month date is a reference", async () => {
mockService("action", { doAction: () => {} });
const model = await createModelWithDataSource({
serverData,
mockRPC: async function (route, args) {
if (args.method === "spreadsheet_move_line_action") {
expect.step("spreadsheet_move_line_action");
expect(args.args).toEqual([
{
codes: ["100"],
company_id: null,
include_unposted: false,
date_range: {
month: 2,
range_type: "month",
year: 2024,
},
},
]);
return {};
}
},
});
const env = model.config.custom.env;
env.model = model;
setCellContent(model, "A1", "02/2024");
setCellContent(model, "A2", '=ODOO.BALANCE("100", A1)');
await waitForDataLoaded(model);
selectCell(model, "A2");
await doMenuAction(cellMenuRegistry, ["move_lines_see_records"], env);
expect.verifySteps(["spreadsheet_move_line_action"]);
});
test("Create drill down domain when date uses a non-standard locale", async () => {
mockService("action", { doAction: () => {} });
const model = await createModelWithDataSource({
serverData,
mockRPC: async function (route, args) {
if (args.method === "spreadsheet_move_line_action") {
expect.step("spreadsheet_move_line_action");
expect(args.args).toEqual([
{
codes: ["100"],
company_id: null,
include_unposted: false,
date_range: {
range_type: "day",
year: 2002,
month: 2,
day: 1,
},
},
]);
return {};
}
},
});
const env = model.config.custom.env;
env.model = model;
const myLocale = { ...DEFAULT_LOCALE, dateFormat: "d/mmm/yyyy" };
model.dispatch("UPDATE_LOCALE", { locale: myLocale });
setCellContent(model, "A1", '=ODOO.BALANCE("100", DATE(2002, 2, 1))');
await waitForDataLoaded(model);
await doMenuAction(cellMenuRegistry, ["move_lines_see_records"], env);
expect.verifySteps(["spreadsheet_move_line_action"]);
});