odoo.define('pos_restaurant.tests.FloorScreen', function (require) {
'use strict';
const PosComponent = require('point_of_sale.PosComponent');
const { useListener } = require('web.custom_hooks');
const testUtils = require('web.test_utils');
const makePosTestEnv = require('point_of_sale.test_env');
const { xml } = owl.tags;
const { useRef } = owl.hooks;
QUnit.module('FloorScreen components', {});
QUnit.test('TableWidget', async function (assert) {
assert.expect(9);
class Parent extends PosComponent {
constructor() {
super();
useListener('select-table', () => assert.step('select-table'));
}
get table() {
// render table T1
return Object.values(this.env.pos.tables_by_id).find(
(table) => table.name === 'T1'
);
}
}
Parent.env = makePosTestEnv();
Parent.template = xml/* html */ `
`;
const parent = new Parent();
await parent.mount(testUtils.prepareTarget());
const tableEl = parent.el.querySelector('.table');
assert.ok(tableEl.querySelector('span.label').textContent.includes('T1'));
assert.ok(tableEl.querySelector('span.table-seats').textContent.includes('4'));
assert.strictEqual(tableEl.style.width, '100px');
assert.strictEqual(tableEl.style.height, '100px');
assert.strictEqual(tableEl.style.background, 'rgb(53, 211, 116)');
assert.strictEqual(tableEl.style.top, '50px');
assert.strictEqual(tableEl.style.left, '50px');
await testUtils.dom.click(tableEl);
assert.verifySteps(['select-table']);
parent.unmount();
parent.destroy();
});
QUnit.test('EditableTable', async function (assert) {
assert.expect(11);
class Parent extends PosComponent {
constructor() {
super();
useListener('save-table', () => assert.step('save-table'));
this.tableRef = useRef('table-ref');
}
get table() {
// render table T1
return Object.values(this.env.pos.tables_by_id).find(
(table) => table.name === 'T1'
);
}
}
Parent.env = makePosTestEnv();
Parent.template = xml/* html */ `
`;
const parent = new Parent();
await parent.mount(testUtils.prepareTarget());
const tableEl = parent.el.querySelector('.table.selected');
assert.ok(tableEl.querySelector('span.label').textContent.includes('T1'));
assert.ok(tableEl.querySelector('span.table-seats').textContent.includes('4'));
assert.strictEqual(tableEl.style.width, '100px');
assert.strictEqual(tableEl.style.height, '100px');
assert.strictEqual(tableEl.style.background, 'rgb(53, 211, 116)');
assert.strictEqual(tableEl.style.top, '50px');
assert.strictEqual(tableEl.style.left, '50px');
parent.tableRef.comp.trigger('resize-end', {
size: { width: 100, height: 100 },
loc: { top: 50, left: 50 },
});
assert.verifySteps(['save-table']);
parent.tableRef.comp.trigger('drag-end', { loc: { top: 50, left: 50 } });
assert.verifySteps(['save-table']);
parent.unmount();
parent.destroy();
});
QUnit.test('EditBar', async function (assert) {
assert.expect(26);
class Parent extends PosComponent {
constructor() {
super();
useListener('create-table', () => assert.step('create-table'));
useListener('duplicate-table', () => assert.step('duplicate-table'));
useListener('rename-table', () => assert.step('rename-table'));
useListener('change-seats-num', () => assert.step('change-seats-num'));
useListener('change-shape', () => assert.step('change-shape'));
useListener('set-table-color', this._onSetTableColor);
useListener('set-floor-color', this._onSetFloorColor);
useListener('delete-table', () => assert.step('delete-table'));
}
get table() {
// render table T1
return Object.values(this.env.pos.tables_by_id).find(
(table) => table.name === 'T1'
);
}
_onSetTableColor({ detail: color }) {
assert.step('set-table-color');
assert.step(color);
}
_onSetFloorColor({ detail: color }) {
assert.step('set-floor-color');
assert.step(color);
}
}
Parent.env = makePosTestEnv();
// Part 1: Test EditBar with selected table
Parent.template = xml/* html */ `
`;
let parent = new Parent();
await parent.mount(testUtils.prepareTarget());
await testUtils.dom.click(parent.el.querySelector('.edit-button i[aria-label=Add]'));
assert.verifySteps(['create-table']);
await testUtils.dom.click(parent.el.querySelector('.edit-button i[aria-label=Duplicate]'));
assert.verifySteps(['duplicate-table']);
await testUtils.dom.click(parent.el.querySelector('.edit-button i[aria-label=Rename]'));
assert.verifySteps(['rename-table']);
await testUtils.dom.click(parent.el.querySelector('.edit-button i[aria-label=Seats]'));
assert.verifySteps(['change-seats-num']);
await testUtils.dom.click(
parent.el.querySelector('.edit-button i[aria-label="Square Shape"]')
);
assert.verifySteps(['change-shape']);
await testUtils.dom.click(parent.el.querySelector('.edit-button i[aria-label=Tint]'));
await testUtils.nextTick();
assert.ok(parent.el.querySelector('.color-picker.fg-picker'));
await testUtils.dom.click(parent.el.querySelector('.fg-picker .color.tl'));
assert.verifySteps(['set-table-color', '#EB6D6D']);
await testUtils.dom.click(parent.el.querySelector('.edit-button.trash'));
assert.verifySteps(['delete-table']);
parent.unmount();
parent.destroy();
// Part 2: Test EditBar without selected table
Parent.template = xml/* html */ `
`;
parent = new Parent();
await parent.mount(testUtils.prepareTarget());
assert.ok(parent.el.querySelector('.edit-button.disabled i[aria-label=Duplicate]'));
assert.ok(parent.el.querySelector('.edit-button.disabled i[aria-label=Rename]'));
assert.ok(parent.el.querySelector('.edit-button.disabled i[aria-label=Seats]'));
assert.ok(parent.el.querySelector('.edit-button.disabled i[aria-label="Square Shape"]'));
assert.ok(parent.el.querySelector('.edit-button.disabled i[aria-label=Delete]'));
await testUtils.dom.click(parent.el.querySelector('.edit-button i[aria-label=Tint]'));
await testUtils.nextTick();
assert.notOk(parent.el.querySelector('.color-picker.fg-picker'));
assert.ok(parent.el.querySelector('.color-picker.bg-picker'));
await testUtils.dom.click(parent.el.querySelector('.bg-picker .color.tl'));
assert.verifySteps(['set-floor-color', 'rgb(244, 149, 149)']);
parent.unmount();
parent.destroy();
});
});