138 lines
4.7 KiB
JavaScript
138 lines
4.7 KiB
JavaScript
import { describe, expect, test } from "@odoo/hoot";
|
|
import { Model, helpers } from "@odoo/o-spreadsheet";
|
|
import {
|
|
createSpreadsheetWithChart,
|
|
insertChartInSpreadsheet,
|
|
} from "@spreadsheet/../tests/helpers/chart";
|
|
import { addGlobalFilter, createBasicChart } from "@spreadsheet/../tests/helpers/commands";
|
|
import { defineSpreadsheetModels } from "@spreadsheet/../tests/helpers/data";
|
|
import { makeSpreadsheetMockEnv } from "@spreadsheet/../tests/helpers/model";
|
|
|
|
describe.current.tags("headless");
|
|
defineSpreadsheetModels();
|
|
|
|
const { toZone } = helpers;
|
|
const chartId = "uuid1";
|
|
|
|
const serverData = {
|
|
menus: {
|
|
root: {
|
|
id: "root",
|
|
children: [1],
|
|
name: "root",
|
|
appID: "root",
|
|
},
|
|
1: {
|
|
id: 1,
|
|
children: [],
|
|
name: "test menu 1",
|
|
xmlid: "spreadsheet_edition.test.menu",
|
|
appID: 1,
|
|
actionID: "menuAction",
|
|
},
|
|
},
|
|
};
|
|
|
|
test("link is kept when copying chart", async () => {
|
|
const env = await makeSpreadsheetMockEnv({ serverData });
|
|
const model = new Model({}, { custom: { env } });
|
|
createBasicChart(model, chartId);
|
|
model.dispatch("LINK_ODOO_MENU_TO_CHART", {
|
|
chartId,
|
|
odooMenuId: 1,
|
|
});
|
|
expect(model.getters.getChartOdooMenu(chartId).id).toBe(1);
|
|
const figureId = model.getters.getFigureIdFromChartId(chartId);
|
|
model.dispatch("UPDATE_CHART", {
|
|
sheetId: model.getters.getActiveSheetId(),
|
|
chartId,
|
|
figureId,
|
|
definition: {
|
|
...model.getters.getChartDefinition(chartId),
|
|
type: "line",
|
|
},
|
|
});
|
|
expect(model.getters.getChartOdooMenu(chartId).id).toBe(1);
|
|
const sheetId = model.getters.getActiveSheetId();
|
|
model.dispatch("SELECT_FIGURE", { figureId });
|
|
model.dispatch("COPY");
|
|
model.dispatch("PASTE", { target: [toZone("A1")] });
|
|
const chartIds = model.getters.getChartIds(sheetId);
|
|
expect(chartIds.length).toBe(2);
|
|
for (const _chartId of chartIds) {
|
|
expect(model.getters.getChartOdooMenu(_chartId).id).toBe(1);
|
|
}
|
|
});
|
|
|
|
test("copy/paste Odoo chart field matching", async () => {
|
|
const { model } = await createSpreadsheetWithChart({ type: "odoo_pie" });
|
|
insertChartInSpreadsheet(model, "odoo_bar");
|
|
const sheetId = model.getters.getActiveSheetId();
|
|
const [chartId1, chartId2] = model.getters.getChartIds(sheetId);
|
|
const fieldMatching = {
|
|
chart: {
|
|
[chartId1]: { type: "many2one", chain: "partner_id.company_id" },
|
|
[chartId2]: { type: "many2one", chain: "user_id.company_id" },
|
|
},
|
|
};
|
|
const filterId = "44";
|
|
await addGlobalFilter(
|
|
model,
|
|
{
|
|
id: filterId,
|
|
type: "relation",
|
|
modelName: "res.company",
|
|
label: "Relation Filter",
|
|
},
|
|
fieldMatching
|
|
);
|
|
model.dispatch("SELECT_FIGURE", { figureId: model.getters.getFigureIdFromChartId(chartId2) });
|
|
model.dispatch("COPY");
|
|
model.dispatch("PASTE", { target: [toZone("A1")] });
|
|
const chartIds = model.getters.getChartIds(sheetId);
|
|
expect(model.getters.getOdooChartFieldMatching(chartId1, filterId).chain).toBe(
|
|
"partner_id.company_id"
|
|
);
|
|
expect(model.getters.getOdooChartFieldMatching(chartId2, filterId).chain).toBe(
|
|
"user_id.company_id"
|
|
);
|
|
expect(model.getters.getOdooChartFieldMatching(chartIds[2], filterId).chain).toBe(
|
|
"user_id.company_id"
|
|
);
|
|
});
|
|
|
|
test("cut/paste Odoo chart field matching", async () => {
|
|
const { model } = await createSpreadsheetWithChart({ type: "odoo_pie" });
|
|
insertChartInSpreadsheet(model, "odoo_bar");
|
|
const sheetId = model.getters.getActiveSheetId();
|
|
const [chartId1, chartId2] = model.getters.getChartIds(sheetId);
|
|
const fieldMatching = {
|
|
chart: {
|
|
[chartId1]: { type: "many2one", chain: "partner_id.company_id" },
|
|
[chartId2]: { type: "many2one", chain: "user_id.company_id" },
|
|
},
|
|
};
|
|
const filterId = "44";
|
|
await addGlobalFilter(
|
|
model,
|
|
{
|
|
id: filterId,
|
|
type: "relation",
|
|
modelName: "res.company",
|
|
label: "Relation Filter",
|
|
},
|
|
fieldMatching
|
|
);
|
|
model.dispatch("SELECT_FIGURE", { figureId: model.getters.getFigureIdFromChartId(chartId2) });
|
|
model.dispatch("CUT");
|
|
model.dispatch("PASTE", { target: [toZone("A1")] });
|
|
const chartIds = model.getters.getChartIds(sheetId);
|
|
expect(model.getters.getOdooChartFieldMatching(chartId1, filterId).chain).toBe(
|
|
"partner_id.company_id"
|
|
);
|
|
expect(() => model.getters.getChartFieldMatch(chartId2)).toThrow(undefined);
|
|
expect(model.getters.getOdooChartFieldMatching(chartIds[1], filterId).chain).toBe(
|
|
"user_id.company_id"
|
|
);
|
|
});
|