website/static/tests/tours/website_text_font_size.js

124 lines
5.6 KiB
JavaScript
Raw Permalink Normal View History

/** @odoo-module **/
import wTourUtils from '@website/js/tours/tour_utils';
import {FONT_SIZE_CLASSES} from '@web_editor/js/editor/odoo-editor/src/utils/utils';
const classNameInfo = new Map();
classNameInfo.set("display-1-fs", {scssVariableName: "display-1-font-size", start: 80, end: 90});
classNameInfo.set("display-2-fs", {scssVariableName: "display-2-font-size", start: 72, end: 80});
classNameInfo.set("display-3-fs", {scssVariableName: "display-3-font-size", start: 64, end: 70});
classNameInfo.set("display-4-fs", {scssVariableName: "display-4-font-size", start: 56, end: 60});
classNameInfo.set("h1-fs", {scssVariableName: "h1-font-size", start: 48, end: 50});
classNameInfo.set("h2-fs", {scssVariableName: "h2-font-size", start: 40, end: 42});
classNameInfo.set("h3-fs", {scssVariableName: "h3-font-size", start: 32, end: 38});
classNameInfo.set("h4-fs", {scssVariableName: "h4-font-size", start: 24, end: 34});
classNameInfo.set("h5-fs", {scssVariableName: "h5-font-size", start: 20, end: 30});
classNameInfo.set("h6-fs", {scssVariableName: "h6-font-size", start: 16, end: 26});
classNameInfo.set("base-fs", {scssVariableName: "font-size-base", start: 16, end: 26});
classNameInfo.set("o_small-fs", {scssVariableName: "small-font-size", start: 14, end: 24});
function checkComputedFontSize(fontSizeClass, stage) {
return {
content: `Check that the computed font size for ${fontSizeClass} is correct`,
trigger: `iframe #wrap .s_text_block .${fontSizeClass}`,
run: function () {
const computedFontSize = parseInt(getComputedStyle(this.$anchor[0]).fontSize);
const expectedFontSize = classNameInfo.get(fontSizeClass)[stage];
const gapBetweenSizes = Math.abs(computedFontSize - expectedFontSize);
const gapTolerance = 7; // Because the font size is responsive.
if (gapBetweenSizes > gapTolerance) {
console.error(`When applied class ${fontSizeClass}, the font size is ` +
`${computedFontSize} instead of ~${expectedFontSize}`);
}
}
};
}
function getFontSizeTestSteps(fontSizeClass) {
return [
wTourUtils.dragNDrop({id: "s_text_block", name: "Text"}),
{
content: `[${fontSizeClass}] Click on the text block first paragraph (to auto select)`,
trigger: "iframe .s_text_block p",
}, {
content: `Open the font size dropdown to select ${fontSizeClass}`,
trigger: "#font-size button",
}, {
content: `Select ${fontSizeClass} in the dropdown`,
trigger: `a[data-apply-class="${fontSizeClass}"]:contains(${classNameInfo.get(fontSizeClass).start})`,
},
checkComputedFontSize(fontSizeClass, "start"),
wTourUtils.goToTheme(),
{
content: `Open the collapse to see the font size of ${fontSizeClass}`,
trigger: `we-collapse:has(we-input[data-variable="` +
`${classNameInfo.get(fontSizeClass).scssVariableName}"]) we-toggler`,
}, {
content: `Check that the setting for ${fontSizeClass} is correct`,
trigger: `we-input[data-variable="${classNameInfo.get(fontSizeClass).scssVariableName}"]`
+ ` input:propValue("${classNameInfo.get(fontSizeClass).start}")`,
isCheck: true,
}, {
content: `Change the setting value of ${fontSizeClass}`,
trigger: `[data-variable="${classNameInfo.get(fontSizeClass).scssVariableName}"] input`,
run: `text_blur ${classNameInfo.get(fontSizeClass).end}`,
}, {
content: `[${fontSizeClass}] Go to blocks tab`,
trigger: ".o_we_add_snippet_btn",
}, {
content: `[${fontSizeClass}] Wait to be in blocks tab`,
trigger: ".o_we_add_snippet_btn.active",
},
wTourUtils.goToTheme(),
{
content: `Check that the setting of ${fontSizeClass} has been updated`,
trigger: `we-input[data-variable="${classNameInfo.get(fontSizeClass).scssVariableName}"]`
+ ` input:propValue("${classNameInfo.get(fontSizeClass).end}")`,
isCheck: true,
}, {
content: `Close the collapse to hide the font size of ${fontSizeClass}`,
trigger: `we-collapse:has(we-input[data-variable=` +
`"${classNameInfo.get(fontSizeClass).scssVariableName}"]) we-toggler`,
extra_trigger: `body:not(:has(.o_we_ui_loading))`,
},
checkComputedFontSize(fontSizeClass, "end"),
{
content: `Click again on the text with class ${fontSizeClass}`,
trigger: `iframe #wrap .s_text_block .${fontSizeClass}`,
}, {
content: `Remove the text snippet containing the text with class ${fontSizeClass}`,
trigger: `.oe_snippet_remove`,
}
];
}
function getAllFontSizesTestSteps() {
const steps = [];
for (const fontSizeClass of FONT_SIZE_CLASSES) {
if (fontSizeClass === 'h6-fs') {
// That option is hidden by default because same value as base-fs
continue;
}
if (fontSizeClass === 'small') {
// There is nothing related to that class in the UI to test anymore.
continue;
}
steps.push(...getFontSizeTestSteps(fontSizeClass));
}
return steps;
}
wTourUtils.registerWebsitePreviewTour("website_text_font_size", {
test: true,
url: "/",
edition: true,
}, () => [
...getAllFontSizesTestSteps(),
// The last step has to be a check.
{
content: "Verify that the text block has been deleted",
trigger: "iframe #wrap:not(:has(.s_text_block))",
isCheck: true,
},
]);