179 lines
6.8 KiB
JavaScript
179 lines
6.8 KiB
JavaScript
|
/* @odoo-module */
|
||
|
|
||
|
import { registry } from "@web/core/registry";
|
||
|
import { contains } from "@web/../tests/utils";
|
||
|
import { stepUtils } from "@web_tour/tour_service/tour_utils";
|
||
|
|
||
|
registry.category("web_tour.tours").add("mail_template_dynamic_placeholder_tour", {
|
||
|
test: true,
|
||
|
url: "/web",
|
||
|
steps: () => [
|
||
|
stepUtils.showAppsMenuItem(),
|
||
|
{
|
||
|
content: 'Go into the Setting "app"',
|
||
|
trigger: '.o_app[data-menu-xmlid="base.menu_administration"]',
|
||
|
},
|
||
|
{
|
||
|
content: "Open email templates",
|
||
|
trigger: 'button[name="open_mail_templates"]',
|
||
|
},
|
||
|
{
|
||
|
content: "Create a new email template",
|
||
|
trigger: "button.o_list_button_add",
|
||
|
},
|
||
|
{
|
||
|
content: 'Insert # inside "Subject" input',
|
||
|
trigger: 'div[name="subject"] input[type="text"]',
|
||
|
async run(actions) {
|
||
|
actions.text(`no_model_id #`, this.$anchor);
|
||
|
this.$anchor[0].dispatchEvent(
|
||
|
new KeyboardEvent("keydown", { bubbles: true, key: "#" })
|
||
|
);
|
||
|
await contains("div[name='subject'] input[type='text']", {
|
||
|
value: "no_model_id #",
|
||
|
});
|
||
|
await contains(".o_notification", {
|
||
|
text: "You need to select a model before opening the dynamic placeholder selector.",
|
||
|
});
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
content: 'Select "Contact" model',
|
||
|
trigger: 'div[name="model_id"] input[type="text"]',
|
||
|
run: "text Contact",
|
||
|
},
|
||
|
{
|
||
|
content: "Wait for the autocomplete RPC",
|
||
|
trigger: 'div[name="model_id"] .ui-autocomplete:contains("Contact")',
|
||
|
isCheck: true,
|
||
|
},
|
||
|
{
|
||
|
content: "Click on contact",
|
||
|
trigger: 'div[name="model_id"] .ui-autocomplete',
|
||
|
run: async function () {
|
||
|
const contact = Array.from(
|
||
|
document.querySelectorAll(
|
||
|
'div[name="model_id"] .ui-autocomplete .dropdown-item'
|
||
|
)
|
||
|
).find((el) => el.textContent === "Contact");
|
||
|
await contact.click();
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
content: "Wait for the drop down to disappear",
|
||
|
trigger: 'div[name="model_id"] .o-autocomplete:not(:has(.ui-autocomplete))',
|
||
|
run: async () => {
|
||
|
// Ensure the system has registered a correct model value before
|
||
|
// we try to open the DPH.
|
||
|
// It seems that the autocomplete validation can be very slow.
|
||
|
await new Promise((r) => setTimeout(r, 200));
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
content: 'Retry insert # inside "Subject" input',
|
||
|
trigger: 'div[name="subject"] input[type="text"]',
|
||
|
run(actions) {
|
||
|
actions.text(`yes_model_id #`, this.$anchor);
|
||
|
this.$anchor[0].dispatchEvent(
|
||
|
new KeyboardEvent("keydown", { bubbles: true, key: "#" })
|
||
|
);
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
content: "Check if the dynamic placeholder popover is opened",
|
||
|
trigger: "div.o_model_field_selector_popover",
|
||
|
isCheck: true,
|
||
|
},
|
||
|
{
|
||
|
content: "filter the dph result",
|
||
|
trigger: "div.o_model_field_selector_popover_search input[type='text']",
|
||
|
run: "text name",
|
||
|
},
|
||
|
{
|
||
|
content: "Click on the first entry of the dynamic placeholder",
|
||
|
trigger: 'div.o_model_field_selector_popover li:first-child button:contains("Name")',
|
||
|
},
|
||
|
{
|
||
|
content: "Enter a default value",
|
||
|
trigger:
|
||
|
'div.o_model_field_selector_popover .o_model_field_selector_default_value_input input[type="text"]',
|
||
|
run: "text defValue",
|
||
|
},
|
||
|
{
|
||
|
content: "Click on the the dynamic placeholder default value",
|
||
|
trigger: "div.o_model_field_selector_popover li:first-child button",
|
||
|
},
|
||
|
{
|
||
|
content: "Wait for the popover to disappear",
|
||
|
trigger: "body:not(:has(.o_model_field_selector_popover))",
|
||
|
},
|
||
|
{
|
||
|
content: "Check if subject value was correclty updated",
|
||
|
trigger: 'div[name="subject"] input[type="text"]',
|
||
|
run() {
|
||
|
const subjectValue = this.$anchor[0].value;
|
||
|
const correctValue = "yes_model_id {{object.name or '''defValue'''}}";
|
||
|
if (subjectValue !== correctValue) {
|
||
|
console.error(
|
||
|
`Email template should have "${correctValue}" in subject input (actual: ${subjectValue})`
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
content: "Insert tesxt inside editable",
|
||
|
trigger: ".note-editable.odoo-editor-editable",
|
||
|
run(actions) {
|
||
|
actions.text(`/`, this.$anchor);
|
||
|
document.querySelector(".note-editable").dispatchEvent(
|
||
|
new InputEvent("input", {
|
||
|
inputType: "insertText",
|
||
|
data: "/",
|
||
|
})
|
||
|
);
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
content: "Click on the the dynamic placeholder commandBar options",
|
||
|
trigger: "div.oe-powerbox-commandWrapper:contains(Dynamic Placeholder)",
|
||
|
},
|
||
|
{
|
||
|
content: "Check if the dynamic placeholder popover is opened",
|
||
|
trigger: "div.o_model_field_selector_popover",
|
||
|
},
|
||
|
{
|
||
|
content: "filter the dph result",
|
||
|
trigger: "div.o_model_field_selector_popover_search input[type='text']",
|
||
|
run: "text name",
|
||
|
},
|
||
|
{
|
||
|
content: "Click on the first entry of the dynamic placeholder",
|
||
|
trigger: 'div.o_model_field_selector_popover li:first-child button:contains("Name")',
|
||
|
},
|
||
|
{
|
||
|
content: "Enter a default value",
|
||
|
trigger:
|
||
|
'div.o_model_field_selector_popover .o_model_field_selector_default_value_input input[type="text"]',
|
||
|
run: "text defValue",
|
||
|
},
|
||
|
{
|
||
|
content: "Click on the the dynamic placeholder default value",
|
||
|
trigger: "div.o_model_field_selector_popover li:first-child button",
|
||
|
},
|
||
|
{
|
||
|
content: "Ensure the editable contain the dynamic placeholder t tag",
|
||
|
trigger:
|
||
|
".note-editable.odoo-editor-editable t[t-out=\"object.name or '''defValue'''\"]",
|
||
|
},
|
||
|
{
|
||
|
content: "Discard form changes",
|
||
|
trigger: "button.o_form_button_cancel",
|
||
|
},
|
||
|
{
|
||
|
content: "Wait for the form view to disappear",
|
||
|
trigger: "body:not(:has(.o_form_sheet))",
|
||
|
isCheck: true,
|
||
|
},
|
||
|
],
|
||
|
});
|