131 lines
5.0 KiB
JavaScript
131 lines
5.0 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import websiteTourUtils from "@website/js/tours/tour_utils";
|
|
import { patch } from "@web/core/utils/patch";
|
|
|
|
const patchWysiwygAdapter = () => {
|
|
const { WysiwygAdapterComponent } = odoo.loader.modules.get("@website/components/wysiwyg_adapter/wysiwyg_adapter");
|
|
return patch(WysiwygAdapterComponent.prototype, {
|
|
_trigger_up(ev) {
|
|
super._trigger_up(...arguments);
|
|
if (ev.name === 'snippet_removed') {
|
|
$('body').attr('test-dd-snippet-removed', true);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
let unpatchWysiwygAdapter = null;
|
|
|
|
import { registry } from "@web/core/registry";
|
|
|
|
let snippetsNames = (new URL(document.location.href)).searchParams.get('snippets_names') || '';
|
|
// When this test is loaded in the backend, the search params aren't as easy to
|
|
// read as before. Little trickery to make this test run.
|
|
const searchParams = new URLSearchParams(window.location.href.split('#')[1]).get('path');
|
|
if (searchParams) {
|
|
snippetsNames = new URLSearchParams(searchParams.split('/')[1]).get('snippets_names') || '';
|
|
snippetsNames = snippetsNames.split(',');
|
|
}
|
|
const dropInOnlySnippets = {
|
|
's_button': '.btn',
|
|
's_image': '.img',
|
|
's_video': '.media_iframe_video',
|
|
};
|
|
let steps = [];
|
|
let n = 0;
|
|
for (const snippet of snippetsNames) {
|
|
n++;
|
|
const isModal = ['s_popup', 's_newsletter_subscribe_popup'].includes(snippet);
|
|
const isDropInOnlySnippet = Object.keys(dropInOnlySnippets).includes(snippet);
|
|
const snippetSteps = [{
|
|
content: `Drop ${snippet} snippet [${n}/${snippetsNames.length}]`,
|
|
trigger: `#oe_snippets .oe_snippet:has( > [data-snippet='${snippet}']) .oe_snippet_thumbnail`,
|
|
run: "drag_and_drop_native iframe #wrap",
|
|
}, {
|
|
content: `Edit ${snippet} snippet`,
|
|
trigger: `iframe #wrap.o_editable [data-snippet='${snippet}']${isModal ? ' .modal.show' : ''}`,
|
|
}, {
|
|
content: `check ${snippet} setting are loaded, wait panel is visible`,
|
|
trigger: ".o_we_customize_panel",
|
|
run: function () {}, // it's a check
|
|
}, {
|
|
content: `Remove the ${snippet} snippet`, // Avoid bad perf if many snippets
|
|
trigger: "we-button.oe_snippet_remove:last"
|
|
}, {
|
|
content: `click on 'BLOCKS' tab (${snippet})`,
|
|
extra_trigger: 'body[test-dd-snippet-removed]',
|
|
trigger: ".o_we_add_snippet_btn",
|
|
run: function (actions) {
|
|
$('body').removeAttr('test-dd-snippet-removed');
|
|
actions.auto();
|
|
},
|
|
}];
|
|
|
|
if (snippet === 's_google_map') {
|
|
snippetSteps.splice(1, 3, {
|
|
content: 'Close API Key popup',
|
|
trigger: "iframe .modal-footer .btn-secondary",
|
|
});
|
|
} else if (isModal) {
|
|
snippetSteps[2]['in_modal'] = false;
|
|
snippetSteps.splice(3, 2, {
|
|
content: `Hide the ${snippet} popup`,
|
|
trigger: `iframe [data-snippet='${snippet}'] .s_popup_close`,
|
|
}, {
|
|
content: `Make sure ${snippet} is hidden`,
|
|
trigger: "iframe body:not(.modal-open)",
|
|
});
|
|
} else if (isDropInOnlySnippet) {
|
|
// The 'drop in only' snippets have their 'data-snippet' attribute
|
|
// removed once they are dropped, so we need to use a different selector.
|
|
snippetSteps[1]['trigger'] = `iframe #wrap.o_editable ${dropInOnlySnippets[snippet]}`;
|
|
}
|
|
steps = steps.concat(snippetSteps);
|
|
}
|
|
|
|
registry.category("web_tour.tours").add("snippets_all_drag_and_drop", {
|
|
test: true,
|
|
// To run the tour locally, you need to insert the URL sent by the python
|
|
// tour here. There is currently an issue with tours which don't have an URL
|
|
// url: '/?enable_editor=1&snippets_names=s_showcase,s_numbers,s_...',
|
|
steps: () => [
|
|
...websiteTourUtils.clickOnEditAndWaitEditMode(),
|
|
{
|
|
content: "Ensure snippets are actually passed at the test.",
|
|
trigger: "body",
|
|
run: function () {
|
|
// safety check, otherwise the test might "break" one day and
|
|
// receive no steps. The test would then not test anything anymore
|
|
// without us noticing it.
|
|
if (steps.length < 220) {
|
|
console.error(`This test is not behaving as it should, got only ${steps.length} steps.`);
|
|
}
|
|
unpatchWysiwygAdapter = patchWysiwygAdapter();
|
|
},
|
|
},
|
|
// This first step is needed as it will be used later for inner snippets
|
|
// Without this, it will dropped inside the footer and will need an extra
|
|
// selector.
|
|
websiteTourUtils.dragNDrop({
|
|
id: "s_text_image",
|
|
name: "Text - Image"
|
|
}),
|
|
{
|
|
content: "Edit s_text_image snippet",
|
|
trigger: "iframe #wrap.o_editable [data-snippet='s_text_image']"
|
|
},
|
|
{
|
|
content: "check setting are loaded, wait panel is visible",
|
|
trigger: ".o_we_customize_panel"
|
|
},
|
|
websiteTourUtils.goBackToBlocks(),
|
|
].concat(steps).concat([
|
|
{
|
|
content: "Remove wysiwyg patch",
|
|
trigger: "body",
|
|
run: () => unpatchWysiwygAdapter(),
|
|
}
|
|
]),
|
|
});
|