Before this commit, the pager component would only quit the edit mode if its value changed when hitting Enter. Now, when pressing Enter while the pager value did not change, it will leave the edit mode and trigger a "pager-changed" event regardless. Task 2318738 closes odoo/odoo#59285 X-original-commit: a3197283d52bfda399ce45b7d5a52406885336d0 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
195 lines
7.3 KiB
JavaScript
195 lines
7.3 KiB
JavaScript
odoo.define('web.pager_tests', function (require) {
|
|
"use strict";
|
|
|
|
const Pager = require('web.Pager');
|
|
const testUtils = require('web.test_utils');
|
|
|
|
const cpHelpers = testUtils.controlPanel;
|
|
const { createComponent } = testUtils;
|
|
|
|
QUnit.module('Components', {}, function () {
|
|
|
|
QUnit.module('Pager');
|
|
|
|
QUnit.test('basic interactions', async function (assert) {
|
|
assert.expect(2);
|
|
|
|
const pager = await createComponent(Pager, {
|
|
props: {
|
|
currentMinimum: 1,
|
|
limit: 4,
|
|
size: 10,
|
|
},
|
|
intercepts: {
|
|
'pager-changed': function (ev) {
|
|
Object.assign(this.state, ev.detail);
|
|
},
|
|
},
|
|
});
|
|
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "1-4",
|
|
"currentMinimum should be set to 1");
|
|
|
|
await cpHelpers.pagerNext(pager);
|
|
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "5-8",
|
|
"currentMinimum should now be 5");
|
|
|
|
pager.destroy();
|
|
});
|
|
|
|
QUnit.test('edit the pager', async function (assert) {
|
|
assert.expect(4);
|
|
|
|
const pager = await createComponent(Pager, {
|
|
props: {
|
|
currentMinimum: 1,
|
|
limit: 4,
|
|
size: 10,
|
|
},
|
|
intercepts: {
|
|
'pager-changed': function (ev) {
|
|
Object.assign(this.state, ev.detail);
|
|
},
|
|
},
|
|
});
|
|
|
|
await testUtils.dom.click(pager.el.querySelector('.o_pager_value'));
|
|
|
|
assert.containsOnce(pager, 'input',
|
|
"the pager should contain an input");
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "1-4",
|
|
"the input should have correct value");
|
|
|
|
// change the limit
|
|
await cpHelpers.setPagerValue(pager, "1-6");
|
|
|
|
assert.containsNone(pager, 'input',
|
|
"the pager should not contain an input anymore");
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "1-6",
|
|
"the limit should have been updated");
|
|
|
|
pager.destroy();
|
|
});
|
|
|
|
QUnit.test("keydown on pager with same value", async function (assert) {
|
|
assert.expect(7);
|
|
|
|
const pager = await createComponent(Pager, {
|
|
props: {
|
|
currentMinimum: 1,
|
|
limit: 4,
|
|
size: 10,
|
|
},
|
|
intercepts: {
|
|
"pager-changed": () => assert.step("pager-changed"),
|
|
},
|
|
});
|
|
|
|
// Enter edit mode
|
|
await testUtils.dom.click(pager.el.querySelector('.o_pager_value'));
|
|
|
|
assert.containsOnce(pager, "input");
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "1-4");
|
|
assert.verifySteps([]);
|
|
|
|
// Exit edit mode
|
|
await testUtils.dom.triggerEvent(pager.el.querySelector('input'), "keydown", { key: "Enter" });
|
|
|
|
assert.containsNone(pager, "input");
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "1-4");
|
|
assert.verifySteps(["pager-changed"]);
|
|
|
|
pager.destroy();
|
|
});
|
|
|
|
QUnit.test('pager value formatting', async function (assert) {
|
|
assert.expect(8);
|
|
|
|
const pager = await createComponent(Pager, {
|
|
props: {
|
|
currentMinimum: 1,
|
|
limit: 4,
|
|
size: 10,
|
|
},
|
|
intercepts: {
|
|
'pager-changed': function (ev) {
|
|
Object.assign(this.state, ev.detail);
|
|
},
|
|
},
|
|
});
|
|
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "1-4", "Initial value should be correct");
|
|
|
|
async function inputAndAssert(input, expected, reason) {
|
|
await cpHelpers.setPagerValue(pager, input);
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), expected,
|
|
`Pager value should be "${expected}" when given "${input}": ${reason}`);
|
|
}
|
|
|
|
await inputAndAssert("4-4", "4", "values are squashed when minimum = maximum");
|
|
await inputAndAssert("1-11", "1-10", "maximum is floored to size when out of range");
|
|
await inputAndAssert("20-15", "10", "combination of the 2 assertions above");
|
|
await inputAndAssert("6-5", "10", "fallback to previous value when minimum > maximum");
|
|
await inputAndAssert("definitelyValidNumber", "10", "fallback to previous value if not a number");
|
|
await inputAndAssert(" 1 , 2 ", "1-2", "value is normalized and accepts several separators");
|
|
await inputAndAssert("3 8", "3-8", "value accepts whitespace(s) as a separator");
|
|
|
|
pager.destroy();
|
|
});
|
|
|
|
QUnit.test('pager disabling', async function (assert) {
|
|
assert.expect(9);
|
|
|
|
const reloadPromise = testUtils.makeTestPromise();
|
|
const pager = await createComponent(Pager, {
|
|
props: {
|
|
currentMinimum: 1,
|
|
limit: 4,
|
|
size: 10,
|
|
},
|
|
intercepts: {
|
|
// The goal here is to test the reactivity of the pager; in a
|
|
// typical views, we disable the pager after switching page
|
|
// to avoid switching twice with the same action (double click).
|
|
'pager-changed': async function (ev) {
|
|
// 1. Simulate a (long) server action
|
|
await reloadPromise;
|
|
// 2. Update the view with loaded data
|
|
Object.assign(this.state, ev.detail);
|
|
},
|
|
},
|
|
});
|
|
const pagerButtons = pager.el.querySelectorAll('button');
|
|
|
|
// Click twice
|
|
await cpHelpers.pagerNext(pager);
|
|
await cpHelpers.pagerNext(pager);
|
|
// Try to edit the pager value
|
|
await testUtils.dom.click(pager.el.querySelector('.o_pager_value'));
|
|
|
|
assert.strictEqual(pagerButtons.length, 2, "the two buttons should be displayed");
|
|
assert.ok(pagerButtons[0].disabled, "'previous' is disabled");
|
|
assert.ok(pagerButtons[1].disabled, "'next' is disabled");
|
|
assert.strictEqual(pager.el.querySelector('.o_pager_value').tagName, 'SPAN',
|
|
"pager edition is prevented");
|
|
|
|
// Server action is done
|
|
reloadPromise.resolve();
|
|
await testUtils.nextTick();
|
|
|
|
assert.strictEqual(pagerButtons.length, 2, "the two buttons should be displayed");
|
|
assert.notOk(pagerButtons[0].disabled, "'previous' is enabled");
|
|
assert.notOk(pagerButtons[1].disabled, "'next' is enabled");
|
|
assert.strictEqual(cpHelpers.getPagerValue(pager), "5-8", "value has been updated");
|
|
|
|
await testUtils.dom.click(pager.el.querySelector('.o_pager_value'));
|
|
|
|
assert.strictEqual(pager.el.querySelector('.o_pager_value').tagName, 'INPUT',
|
|
"pager edition is re-enabled");
|
|
|
|
pager.destroy();
|
|
});
|
|
});
|
|
});
|