117 lines
3.8 KiB
JavaScript
117 lines
3.8 KiB
JavaScript
/** @odoo-module */
|
|
|
|
import * as spreadsheet from "@odoo/o-spreadsheet";
|
|
import { registry } from "@web/core/registry";
|
|
import { actionService } from "@web/webclient/actions/action_service";
|
|
import { menuService } from "@web/webclient/menus/menu_service";
|
|
import { spreadsheetLinkMenuCellService } from "@spreadsheet/ir_ui_menu/index";
|
|
import { makeTestEnv } from "@web/../tests/helpers/mock_env";
|
|
import { getMenuServerData } from "@spreadsheet/../tests/links/menu_data_utils";
|
|
import { patchWithCleanup } from "@web/../tests/helpers/utils";
|
|
import { getEvaluatedCell } from "../utils/getters";
|
|
|
|
const { Model } = spreadsheet;
|
|
const { urlRepresentation, openLink } = spreadsheet.links;
|
|
|
|
function beforeEach() {
|
|
registry
|
|
.category("services")
|
|
.add("menu", menuService)
|
|
.add("action", actionService)
|
|
.add("spreadsheetLinkMenuCell", spreadsheetLinkMenuCellService);
|
|
}
|
|
|
|
QUnit.module("spreadsheet > link", { beforeEach });
|
|
|
|
QUnit.test("click a web link", async (assert) => {
|
|
patchWithCleanup(window, {
|
|
open: (href) => {
|
|
assert.step(href.toString());
|
|
},
|
|
});
|
|
const env = await makeTestEnv();
|
|
const data = {
|
|
sheets: [
|
|
{
|
|
cells: { A1: { content: "[Odoo](https://odoo.com)" } },
|
|
},
|
|
],
|
|
};
|
|
const model = new Model(data, { custom: { env } });
|
|
const cell = getEvaluatedCell(model, "A1");
|
|
assert.strictEqual(urlRepresentation(cell.link, model.getters), "https://odoo.com");
|
|
openLink(cell.link, env);
|
|
assert.verifySteps(["https://odoo.com"]);
|
|
});
|
|
|
|
QUnit.test("click a menu link", async (assert) => {
|
|
const fakeActionService = {
|
|
name: "action",
|
|
start() {
|
|
return {
|
|
doAction(action) {
|
|
assert.step(action);
|
|
},
|
|
};
|
|
},
|
|
};
|
|
registry.category("services").add("action", fakeActionService, { force: true });
|
|
const env = await makeTestEnv({ serverData: getMenuServerData() });
|
|
const data = {
|
|
sheets: [
|
|
{
|
|
cells: { A1: { content: "[label](odoo://ir_menu_xml_id/test_menu)" } },
|
|
},
|
|
],
|
|
};
|
|
const model = new Model(data, { custom: { env } });
|
|
const cell = getEvaluatedCell(model, "A1");
|
|
assert.strictEqual(urlRepresentation(cell.link, model.getters), "menu with xmlid");
|
|
openLink(cell.link, env);
|
|
assert.verifySteps(["action1"]);
|
|
});
|
|
|
|
QUnit.test("click a menu link", async (assert) => {
|
|
const fakeActionService = {
|
|
name: "action",
|
|
start() {
|
|
return {
|
|
doAction(action) {
|
|
assert.step("do-action");
|
|
assert.deepEqual(action, {
|
|
context: undefined,
|
|
domain: undefined,
|
|
name: "an odoo view",
|
|
res_model: "partner",
|
|
target: "current",
|
|
type: "ir.actions.act_window",
|
|
views: [[false, "list"]],
|
|
});
|
|
},
|
|
};
|
|
},
|
|
};
|
|
registry.category("services").add("action", fakeActionService, { force: true });
|
|
const env = await makeTestEnv({ serverData: getMenuServerData() });
|
|
const view = {
|
|
name: "an odoo view",
|
|
viewType: "list",
|
|
action: {
|
|
modelName: "partner",
|
|
views: [[false, "list"]],
|
|
},
|
|
};
|
|
const data = {
|
|
sheets: [
|
|
{
|
|
cells: { A1: { content: `[a view](odoo://view/${JSON.stringify(view)})` } },
|
|
},
|
|
],
|
|
};
|
|
const model = new Model(data, { custom: { env } });
|
|
const cell = getEvaluatedCell(model, "A1");
|
|
assert.strictEqual(urlRepresentation(cell.link, model.getters), "an odoo view");
|
|
openLink(cell.link, env);
|
|
assert.verifySteps(["do-action"]);
|
|
});
|