odoo.define('point_of_sale.test_popups', function(require) {
'use strict';
const Registries = require('point_of_sale.Registries');
const testUtils = require('web.test_utils');
const PosComponent = require('point_of_sale.PosComponent');
const PopupControllerMixin = require('point_of_sale.PopupControllerMixin');
const makePosTestEnv = require('point_of_sale.test_env');
const { xml } = owl.tags;
QUnit.module('unit tests for Popups', {
before() {
class Root extends PopupControllerMixin(PosComponent) {
static template = xml`
`;
}
Root.env = makePosTestEnv();
this.Root = Root;
Registries.Component.freeze();
},
});
QUnit.test('ConfirmPopup', async function(assert) {
assert.expect(6);
const root = new this.Root();
await root.mount(testUtils.prepareTarget());
let promResponse, userResponse;
// Step: show popup and confirm
promResponse = root.showPopup('ConfirmPopup', {});
await testUtils.nextTick();
testUtils.dom.click(root.el.querySelector('.confirm'));
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, true);
// Step: show popup then cancel
promResponse = root.showPopup('ConfirmPopup', {});
await testUtils.nextTick();
testUtils.dom.click(root.el.querySelector('.cancel'));
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, false);
// Step: check texts
promResponse = root.showPopup('ConfirmPopup', {
title: 'Are you sure?',
body: 'Are you having fun?',
confirmText: 'Hell Yeah!',
cancelText: 'Are you kidding me?',
});
await testUtils.nextTick();
assert.strictEqual(root.el.querySelector('.title').innerText.trim(), 'Are you sure?');
assert.strictEqual(root.el.querySelector('.body').innerText.trim(), 'Are you having fun?');
assert.strictEqual(root.el.querySelector('.confirm').innerText.trim(), 'Hell Yeah!');
assert.strictEqual(
root.el.querySelector('.cancel').innerText.trim(),
'Are you kidding me?'
);
root.unmount();
root.destroy();
});
QUnit.test('NumberPopup', async function(assert) {
assert.expect(8);
const root = new this.Root();
await root.mount(testUtils.prepareTarget());
let promResponse, userResponse;
// Step: show NumberPopup and confirm with empty buffer
promResponse = root.showPopup('NumberPopup', {});
await testUtils.nextTick();
testUtils.dom.triggerEvent(root.el.querySelector('.confirm'), 'mousedown');
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, true);
assert.strictEqual(userResponse.payload, "");
// Step: show NumberPopup and cancel
promResponse = root.showPopup('NumberPopup', {});
await testUtils.nextTick();
testUtils.dom.triggerEvent(root.el.querySelector('.cancel'), 'mousedown');
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, false);
// Step: show NumberPopup and confirm with filled buffer, new title, new text
promResponse = root.showPopup('NumberPopup', {
title: 'Are you sure?',
confirmText: 'Hell Yeah!',
cancelText: 'Are you kidding me?',
});
await testUtils.nextTick();
let nodes = Array.from(root.el.querySelectorAll('button'));
testUtils.dom.triggerEvent(nodes.find(elem => elem.innerHTML === "7"), 'mousedown');
await testUtils.nextTick();
testUtils.dom.triggerEvent(nodes.find(elem => elem.innerHTML === "+10"), 'mousedown');
await testUtils.nextTick();
assert.strictEqual(root.el.querySelector('.title').innerText.trim(), 'Are you sure?');
assert.strictEqual(root.el.querySelector('.confirm').innerText.trim(), 'Hell Yeah!');
assert.strictEqual(root.el.querySelector('.cancel').innerText.trim(), 'Are you kidding me?');
testUtils.dom.triggerEvent(root.el.querySelector('.confirm'), 'mousedown');
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, true);
assert.strictEqual(userResponse.payload, "17");
root.unmount();
root.destroy();
});
QUnit.test('EditListPopup', async function(assert) {
assert.expect(7);
const root = new this.Root();
await root.mount(testUtils.prepareTarget());
let promResponse, userResponse;
// Step: show popup and confirm
promResponse = root.showPopup('EditListPopup', {});
await testUtils.nextTick();
testUtils.dom.click(root.el.querySelector('.confirm'));
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, true);
assert.strictEqual(JSON.stringify(userResponse.payload.newArray), JSON.stringify([]));
// Step: show popup and cancel
promResponse = root.showPopup('EditListPopup', {});
await testUtils.nextTick();
testUtils.dom.click(root.el.querySelector('.cancel'));
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, false);
// Step: show popup and confirm with a default array
let defaultArray = ["Banana", "Cherry"];
promResponse = root.showPopup('EditListPopup', {
title: "Fruits",
isSingleItem: false,
array: defaultArray,
});
await testUtils.nextTick();
testUtils.dom.click(root.el.querySelector('.confirm'));
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, true);
let i = 0;
defaultArray = defaultArray.map((item) => Object.assign({}, { _id: i++ }, { 'text': item}));
assert.strictEqual(JSON.stringify(userResponse.payload.newArray), JSON.stringify(defaultArray));
// Step: show popup and confirm with a new array
promResponse = root.showPopup('EditListPopup', {
title: "Fruits",
isSingleItem: false,
array: ["Banana", "Cherry"],
});
await testUtils.nextTick();
testUtils.dom.click(root.el.querySelector('.fa-trash-o'));
await testUtils.nextTick();
testUtils.dom.click(root.el.querySelector('.confirm'));
await testUtils.nextTick();
userResponse = await promResponse;
assert.strictEqual(userResponse.confirmed, true);
assert.strictEqual(JSON.stringify(userResponse.payload.newArray), JSON.stringify([{ _id: 1, text: "Cherry"}]));
root.unmount();
root.destroy();
});
});