70 lines
3.0 KiB
JavaScript
70 lines
3.0 KiB
JavaScript
|
/** @odoo-module **/
|
||
|
|
||
|
import wTourUtils from '@website/js/tours/tour_utils';
|
||
|
|
||
|
// Note: cannot import @website/../tests/tour_utils/widget_lifecycle_dep_widget
|
||
|
// here because that module requires web.public.widget which is not available
|
||
|
// in the backend, where this tour definition is loaded. Easier to duplicate
|
||
|
// that key for now rather than create a whole file to handle this localStorage
|
||
|
// key only.
|
||
|
const localStorageKey = 'widgetAndWysiwygLifecycle';
|
||
|
|
||
|
wTourUtils.registerWebsitePreviewTour("widget_lifecycle", {
|
||
|
test: true,
|
||
|
url: "/",
|
||
|
edition: true,
|
||
|
}, () => [
|
||
|
wTourUtils.dragNDrop({
|
||
|
id: "s_countdown",
|
||
|
name: "Countdown",
|
||
|
}),
|
||
|
{
|
||
|
content: "Wait for the widget to be started and empty the widgetAndWysiwygLifecycle list",
|
||
|
trigger: "iframe .s_countdown.public_widget_started",
|
||
|
run: () => {
|
||
|
// Start recording the calls to the "start" and "destroy" method of
|
||
|
// the widget and the wysiwyg.
|
||
|
window.localStorage.setItem(localStorageKey, '[]');
|
||
|
},
|
||
|
},
|
||
|
...wTourUtils.clickOnSave(),
|
||
|
{
|
||
|
content: "Wait for the widget to be started",
|
||
|
trigger: "iframe .s_countdown.public_widget_started",
|
||
|
run: () => {}, // It's a check
|
||
|
},
|
||
|
...wTourUtils.clickOnEditAndWaitEditMode(),
|
||
|
{
|
||
|
content: "Wait for the widget to be started and check the order of the lifecycle method call of the widget and the wysiwyg",
|
||
|
trigger: "iframe .s_countdown.public_widget_started",
|
||
|
run: () => {
|
||
|
const result = JSON.parse(window.localStorage.widgetAndWysiwygLifecycle);
|
||
|
const expected = ["widgetStop", "wysiwygStop", "widgetStart",
|
||
|
"widgetStop", "wysiwygStart", "wysiwygStarted", "widgetStart",
|
||
|
];
|
||
|
const alternative = ["widgetStop", "widgetStart", "wysiwygStop",
|
||
|
"widgetStop", "wysiwygStart", "wysiwygStarted", "widgetStart",
|
||
|
];
|
||
|
const resultIsEqualTo = (arr) => {
|
||
|
return arr.length === result.length
|
||
|
&& arr.every((item, i) => item === result[i]);
|
||
|
};
|
||
|
if (!(resultIsEqualTo(expected) || resultIsEqualTo(alternative))) {
|
||
|
// The "destroy" method of the wysiwyg is called two times when
|
||
|
// leaving the edit mode: the first one comes explicitly from
|
||
|
// the "leaveEditMode" of the "wysiwyg_adapter". The second
|
||
|
// comes from the OWL mechanism as the wysiwyg is not present in
|
||
|
// the DOM when the page is reloaded. Because it is not
|
||
|
// guaranteed that this last call happens before the start of
|
||
|
// the widget at the page reload, two sequences are acceptable
|
||
|
// as a result.
|
||
|
console.error(`
|
||
|
Expected: ${expected.toString()}
|
||
|
Or: ${alternative.toString()}
|
||
|
Result: ${result.toString()}
|
||
|
`);
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
]);
|