Odoo18-Base/addons/web/static/tests/search/pager_hook_tests.js
2025-03-10 10:52:11 +07:00

134 lines
4.0 KiB
JavaScript

/** @odoo-module **/
import { ControlPanel } from "@web/search/control_panel/control_panel";
import { usePager } from "@web/search/pager_hook";
import { click, getFixture, nextTick } from "../helpers/utils";
import { makeWithSearch, setupControlPanelServiceRegistry } from "./helpers";
import { Component, useState, xml } from "@odoo/owl";
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("usePager");
QUnit.test("pager is correctly displayed", async (assert) => {
class TestComponent extends Component {
setup() {
usePager(() => ({
offset: 0,
limit: 10,
total: 50,
onUpdate: () => {},
}));
}
}
TestComponent.components = { ControlPanel };
TestComponent.template = xml`<ControlPanel />`;
await makeWithSearch({
serverData,
resModel: "foo",
Component: TestComponent,
searchMenuTypes: [],
});
assert.containsOnce(target, ".o_pager");
assert.strictEqual(
target.querySelector(`.o_pager_counter .o_pager_value`).textContent.trim(),
"1-10"
);
assert.strictEqual(
target.querySelector(`.o_pager_counter span.o_pager_limit`).textContent.trim(),
"50"
);
});
QUnit.test("pager is correctly updated", async (assert) => {
class TestComponent extends Component {
setup() {
this.state = useState({ offset: 0, limit: 10 });
usePager(() => ({
offset: this.state.offset,
limit: this.state.limit,
total: 50,
onUpdate: (newState) => {
Object.assign(this.state, newState);
},
}));
}
}
TestComponent.components = { ControlPanel };
TestComponent.template = xml`<ControlPanel />`;
const comp = await makeWithSearch({
serverData,
resModel: "foo",
Component: TestComponent,
searchMenuTypes: [],
});
assert.containsOnce(target, ".o_pager");
assert.strictEqual(
target.querySelector(`.o_pager_counter .o_pager_value`).textContent.trim(),
"1-10"
);
assert.strictEqual(
target.querySelector(`.o_pager_counter span.o_pager_limit`).textContent.trim(),
"50"
);
assert.deepEqual(comp.state, {
offset: 0,
limit: 10,
});
await click(target.querySelector(`.o_pager button.o_pager_next`));
assert.containsOnce(target, ".o_pager");
assert.strictEqual(
target.querySelector(`.o_pager_counter .o_pager_value`).textContent.trim(),
"11-20"
);
assert.strictEqual(
target.querySelector(`.o_pager_counter span.o_pager_limit`).textContent.trim(),
"50"
);
assert.deepEqual(comp.state, {
offset: 10,
limit: 10,
});
comp.state.offset = 20;
await nextTick();
assert.containsOnce(target, ".o_pager");
assert.strictEqual(
target.querySelector(`.o_pager_counter .o_pager_value`).textContent.trim(),
"21-30"
);
assert.strictEqual(
target.querySelector(`.o_pager_counter span.o_pager_limit`).textContent.trim(),
"50"
);
assert.deepEqual(comp.state, {
offset: 20,
limit: 10,
});
});
});