Odoo18-Base/addons/web/static/tests/search/control_panel.js
2025-03-10 11:12:23 +07:00

144 lines
4.5 KiB
JavaScript

/** @odoo-module **/
import { click, getFixture, nextTick } from "@web/../tests/helpers/utils";
import { ControlPanel } from "@web/search/control_panel/control_panel";
import { makeWithSearch, setupControlPanelServiceRegistry } from "./helpers";
let target;
let serverData;
QUnit.module("Search", (hooks) => {
hooks.beforeEach(async () => {
serverData = {
models: {
foo: {
fields: {},
},
},
views: {
"foo,false,search": `<search/>`,
},
};
setupControlPanelServiceRegistry();
target = getFixture();
});
QUnit.module("ControlPanel");
QUnit.test("simple rendering", async (assert) => {
await makeWithSearch({
serverData,
resModel: "foo",
Component: ControlPanel,
componentProps: {
display: {
"top-right": false,
},
},
searchMenuTypes: [],
});
assert.containsOnce(target, ".o_cp_top");
assert.containsOnce(target, ".o_cp_top_left");
assert.strictEqual(target.querySelector(".o_cp_top_right").innerHTML, "");
assert.containsOnce(target, ".o_cp_bottom");
assert.containsOnce(target, ".o_cp_bottom_left");
assert.containsOnce(target, ".o_cp_bottom_right");
assert.containsNone(target, ".o_cp_switch_buttons");
assert.containsOnce(target, ".breadcrumb");
});
QUnit.test("breadcrumbs", async (assert) => {
const controlPanel = await makeWithSearch({
serverData,
resModel: "foo",
Component: ControlPanel,
config: {
breadcrumbs: [
{ jsId: "controller_7", name: "Previous" },
{ jsId: "controller_9", name: "Current" },
],
},
searchMenuTypes: [],
});
assert.containsN(target, ".breadcrumb li.breadcrumb-item", 2);
const breadcrumbItems = target.querySelectorAll("li.breadcrumb-item");
assert.strictEqual(breadcrumbItems[0].innerText, "Previous");
assert.hasClass(breadcrumbItems[1], "active");
assert.strictEqual(breadcrumbItems[1].innerText, "Current");
controlPanel.env.services.action.restore = (jsId) => {
assert.step(jsId);
};
await click(breadcrumbItems[0]);
assert.verifySteps(["controller_7"]);
});
QUnit.test("view switcher", async (assert) => {
const controlPanel = await makeWithSearch({
serverData,
resModel: "foo",
Component: ControlPanel,
config: {
viewSwitcherEntries: [
{
type: "list",
active: true,
icon: "oi-view-list",
name: "List",
accessKey: "l",
},
{ type: "kanban", icon: "oi-view-kanban", name: "Kanban", accessKey: "k" },
],
},
searchMenuTypes: [],
});
assert.containsOnce(target, ".o_cp_switch_buttons");
assert.containsN(target, ".o_switch_view", 2);
const views = target.querySelectorAll(".o_switch_view");
assert.strictEqual(views[0].getAttribute("data-tooltip"), "List");
assert.strictEqual(views[0].getAttribute("data-hotkey"), "l");
assert.hasClass(views[0], "active");
assert.strictEqual(views[1].getAttribute("data-tooltip"), "Kanban");
assert.strictEqual(views[1].getAttribute("data-hotkey"), "k");
assert.hasClass(views[1], "oi-view-kanban");
controlPanel.env.services.action.switchView = (viewType) => {
assert.step(viewType);
};
await click(views[1]);
assert.verifySteps(["kanban"]);
});
QUnit.test("pager", async (assert) => {
const pagerProps = {
offset: 0,
limit: 10,
total: 50,
onUpdate: () => {},
};
const controlPanel = await makeWithSearch({
serverData,
resModel: "foo",
Component: ControlPanel,
config: {
pagerProps: pagerProps,
},
searchMenuTypes: [],
});
assert.containsOnce(target, ".o_pager");
pagerProps.total = 0;
controlPanel.render();
await nextTick();
assert.containsNone(target, ".o_pager");
});
});