Odoo18-Base/addons/project/static/tests/tours/project_task_history.js
2025-01-06 10:57:38 +07:00

191 lines
7.1 KiB
JavaScript

/**
* Project Task history tour.
* Features tested:
* - Create / edit a task description and ensure revisions are created on write
* - Open the history dialog and check that the revisions are correctly shown
* - Select a revision and check that the content / comparison are correct
* - Click the restore button and check that the content is correctly restored
*/
import { registry } from "@web/core/registry";
import { stepUtils } from "@web_tour/tour_service/tour_utils";
const baseDescriptionContent = "Test project task history version";
const descriptionField = "div.note-editable.odoo-editor-editable p";
function changeDescriptionContentAndSave(newContent) {
const newText = `${baseDescriptionContent} ${newContent}`;
return [ {
// force focus on editable so editor will create initial p (if not yet done)
trigger: "div.note-editable.odoo-editor-editable",
run: "click",
}, {
trigger: descriptionField,
run: async function(actions) {
const textTriggerElement = this.anchor.querySelector(descriptionField);
await actions.editor(newText, textTriggerElement);
await new Promise((r) => setTimeout(r, 300));
},
}, {
trigger: "button.o_form_button_save",
run: "click",
}];
}
registry.category("web_tour.tours").add("project_task_history_tour", {
url: "/odoo",
steps: () => [stepUtils.showAppsMenuItem(), {
content: "Open the project app",
trigger: ".o_app[data-menu-xmlid='project.menu_main_pm']",
run: "click",
},
{
content: "Open Test History Project",
trigger: ".o_kanban_view .o_kanban_record:contains(Test History Project)",
run: "click",
},
{
content: "Open Test History Task",
trigger: ".o_kanban_view .o_kanban_record:contains(Test History Task)",
run: "click",
},
// edit the description content 3 times and save after each edit
...changeDescriptionContentAndSave("0"),
...changeDescriptionContentAndSave("1"),
...changeDescriptionContentAndSave("2"),
...changeDescriptionContentAndSave("3"),
{
content: "Go back to kanban view of tasks. this step is added because it takes some time to save the changes, so it's a sort of timeout to wait a bit for the save",
trigger: ".o_back_button a",
run: "click",
},
{
content: "Open Test History Task",
trigger: ".o_kanban_view .o_kanban_record:contains(Test History Task)",
run: "click",
},
{
content: "Open History Dialog",
trigger: ".o_form_view .o_cp_action_menus i.fa-cog",
run: "click",
},
{
trigger: ".dropdown-menu",
},
{
content: "Open History Dialog",
trigger: ".o_menu_item i.fa-history",
run: "click",
}, {
content: "Verify that 4 revisions are displayed (default empty description after the creation of the task + 3 edits)",
trigger: ".modal .html-history-dialog .revision-list .btn",
run: function () {
const items = document.querySelectorAll(".revision-list .btn");
if (items.length !== 4) {
throw new Error('Expect 4 Revisions in the history dialog, got ' + items.length);
}
},
}, {
content: "Verify that the active revision (revision 4) is related to the third edit",
trigger: `.modal .history-container .tab-pane:contains("${baseDescriptionContent} 2")`,
run: "click",
}, {
content: "Go to the third revision related to the second edit",
trigger: ".modal .html-history-dialog .revision-list .btn:nth-child(2)",
run: "click",
}, {
content: "Verify that the active revision is the one clicked in the previous step",
trigger: `.modal .history-container .tab-pane:contains("${baseDescriptionContent} 1")`,
run: "click",
}, {
content: "Go to comparison tab",
trigger: ".modal .history-container .nav-item:contains(Comparison) a",
run: "click",
}, {
content: "Verify comparaison text",
trigger: ".modal .history-container .tab-pane",
run: function () {
const comparaisonHtml = this.anchor.innerHTML;
const correctHtml = `<added>${baseDescriptionContent} 1</added><removed>${baseDescriptionContent} 3</removed>`;
if (!comparaisonHtml.includes(correctHtml)) {
console.error(`Expect comparison to be ${correctHtml}, got ${comparaisonHtml}`);
}
},
}, {
content: "Click on Restore History btn to get back to the selected revision in the previous step",
trigger: ".modal button.btn-primary:contains(/^Restore history$/)",
run: "click",
}, {
content: "Verify the confirmation dialog is opened",
trigger: ".modal button.btn-primary:contains(/^Restore$/)",
run: "click",
}, {
content: "Verify that the description contains the right text after the restore",
trigger: descriptionField,
run: function () {
const p = this.anchor?.innerText;
const expected = `${baseDescriptionContent} 1`;
if (p !== expected) {
throw new Error(`Expect description to be ${expected}, got ${p}`);
}
}
}, {
content: "Go back to projects view.",
trigger: 'a[data-menu-xmlid="project.menu_projects"]',
run: "click",
}, {
trigger: ".o_kanban_view",
}, {
content: "Open Test History Project Without Tasks",
trigger: ".o_kanban_view .o_kanban_record:contains(Without tasks project)",
run: "click",
}, {
trigger: ".o_kanban_project_tasks",
}, {
content: "Switch to list view",
trigger: ".o_switch_view.o_list",
run: "click",
}, {
content: "Create a new task.",
trigger: '.o_list_button_add',
run: "click",
}, {
trigger: ".o_form_view",
}, {
trigger: 'div[name="name"] .o_input',
content: 'Set task name',
run: 'edit New task',
},
{
trigger: "button.o_form_button_save",
run: "click",
},
...changeDescriptionContentAndSave("0"),
...changeDescriptionContentAndSave("1"),
...changeDescriptionContentAndSave("2"),
...changeDescriptionContentAndSave("3"),
{
trigger: ".o_form_view",
}, {
content: "Open History Dialog",
trigger: ".o_cp_action_menus i.fa-cog",
run: "click",
}, {
trigger: ".dropdown-menu",
}, {
content: "Open History Dialog",
trigger: ".o_menu_item i.fa-history",
run: "click",
}, {
content: "Close History Dialog",
trigger: ".modal-header .btn-close",
run: "click",
}, {
content: "Go back to projects view. this step is added because Tour can't be finished with an open form view in edition mode.",
trigger: 'a[data-menu-xmlid="project.menu_projects"]',
run: "click",
}, {
content: "Verify that we are on kanban view",
trigger: 'button.o_switch_view.o_kanban.active',
}
]});