Files
enterprise-addons/spreadsheet_dashboard_edition/static/tests/helpers/test_helpers.js
T

84 lines
2.8 KiB
JavaScript

import { Deferred } from "@web/core/utils/concurrency";
import { animationFrame } from "@odoo/hoot-mock";
import { makeSpreadsheetMockEnv } from "@spreadsheet/../tests/helpers/model";
import { WebClient } from "@web/webclient/webclient";
import { getService, mountWithCleanup, patchWithCleanup } from "@web/../tests/web_test_helpers";
import {
prepareWebClientForSpreadsheet,
getSpreadsheetActionModel,
getSpreadsheetActionEnv,
} from "@spreadsheet_edition/../tests/helpers/webclient_helpers";
import { getDashboardBasicServerData } from "./test_data";
import { onMounted } from "@odoo/owl";
import { DashboardEditAction } from "../../src/bundle/action/dashboard_edit_action";
/**
* @typedef {import("@spreadsheet/../tests/helpers/data").ServerData} ServerData
* @typedef {object} SpreadsheetTestParams
* @property {number} [spreadsheetId]
* @property {ServerData} [serverData] Data to be injected in the mock server
* @property {Function} [mockRPC] Mock rpc function
*/
/**
* @param {SpreadsheetTestParams} [params]
*/
export async function createDashboardEditAction(params) {
/** @type {any} */
let spreadsheetAction;
const actionMountedDef = new Deferred();
patchWithCleanup(DashboardEditAction.prototype, {
setup() {
super.setup();
onMounted(() => actionMountedDef.resolve());
spreadsheetAction = this;
},
});
const serverData = params?.serverData || getDashboardBasicServerData();
let spreadsheetId = params?.spreadsheetId;
if (!spreadsheetId) {
spreadsheetId = createNewDashboard(serverData);
}
await prepareWebClientForSpreadsheet();
await makeSpreadsheetMockEnv({
serverData,
mockRPC: params?.mockRPC,
});
await mountWithCleanup(WebClient);
await getService("action").doAction({
type: "ir.actions.client",
tag: "action_edit_dashboard",
params: {
spreadsheet_id: spreadsheetId,
},
});
await actionMountedDef;
await animationFrame();
return {
model: getSpreadsheetActionModel(spreadsheetAction),
env: getSpreadsheetActionEnv(spreadsheetAction),
};
}
/**
*
* @param {ServerData} serverData
* @param {object} [data] spreadsheet data
* @returns {number}
*/
export function createNewDashboard(serverData, data) {
if (!serverData.models["spreadsheet.dashboard"].records) {
serverData.models["spreadsheet.dashboard"].records = [];
}
const dashboards = serverData.models["spreadsheet.dashboard"].records;
const maxId = dashboards.length ? Math.max(...dashboards.map((d) => d.id)) : 0;
const spreadsheetId = maxId + 1;
dashboards.push({
id: spreadsheetId,
name: "Untitled Dashboard",
spreadsheet_data: data ? JSON.stringify(data) : "{}",
});
return spreadsheetId;
}