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

568 lines
21 KiB
JavaScript

/** @odoo-module **/
import { stepUtils } from "@web_tour/tour_service/tour_utils";
import { registry } from "@web/core/registry";
var inc;
registry.category("web_tour.tours").add('widget_x2many', {
url: '/odoo/action-test_new_api.action_discussions?debug=tests',
steps: () => [
/////////////////////////////////////////////////////////////////////////////////////////////
// Discussions
/////////////////////////////////////////////////////////////////////////////////////////////
{
content: "wait web client",
trigger: '.o_breadcrumb:contains(Discussions)',
run: "click",
}, { // create test discussion
content: "create new discussion",
trigger: 'button.o_list_button_add',
run: "click",
}, {
content: "insert content",
trigger: '.o_field_widget.o_required_modifier input',
run: "edit test",
}, {
content: "click on moderator many2one dropdown",
trigger: '.o_field_widget[name=moderator] input',
run: 'click',
}, {
content: "insert value in moderator",
trigger: '.o_field_widget[name=moderator] input',
run: "edit test",
}, {
content: "click on 'Create and Edit...'",
trigger: '.o_field_widget[name=moderator] .o-autocomplete--dropdown-menu .o_m2o_dropdown_option_create_edit a',
run: "click",
},
{
content: "insert a name into the modal form",
trigger: ".modal .o_field_widget[name=name] input",
run: `edit user_test_${(inc = new Date().getTime())}`,
}, {
content: "insert an email into the modal form",
trigger: ".modal .o_field_widget[name=login] input",
run: `edit user_test_${inc}@test`,
}, {
content: "save the modal content and create the new moderator",
trigger: ".modal .o_form_button_save",
run: "click",
}, {
content: "check if the modal is saved",
trigger: '.o_field_widget[name=moderator] input:value(user_test)',
}, {
content: "go to Participants tab to check onchange",
trigger: '.o_notebook_headers .nav-item a:contains(Participants)',
run: "click",
}, {
content: "check the onchange from the o2m to the m2m",
trigger: '.o_field_widget[name=participants] .o_data_cell:contains(user_test)',
}, { // add ourself as participant
content: "click to add participants",
trigger: '.o_field_widget[name=participants] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "select Admin",
trigger: 'tr:has(td:contains(/^Mitchell Admin$/)) .o_list_record_selector input[type="checkbox"]',
run: "click",
},
{
trigger: 'tr:has(td:contains(/^Mitchell Admin$/)) .o_list_record_selector input[type="checkbox"]:checked',
},
{
content: "save selected participants",
trigger: '.o_select_button',
run: "click",
},
{
trigger: '.o_field_widget[name=participants] .o_data_cell:contains(/^Mitchell Admin$/)',
},
...stepUtils.saveForm(),
{ // add message a
content: "Select First Tab",
trigger: '.o_notebook_headers .nav-item a:contains(Messages)',
run: "click",
}, {
content: "create new message a",
trigger: '.o_field_widget[name=messages] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "insert body a",
trigger: '.modal-body textarea:first',
run: "edit a",
}, {
content: "save new message a",
trigger: '.modal-footer .o_form_button_save',
run: "click",
},
{
trigger: '.o_field_widget[name="message_concat"] textarea:value([test] Mitchell Admin:a)',
},
{ // add message b
content: "create new message b",
trigger: '.o_field_widget[name=messages] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "insert body b",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit b",
}, {
content: "save new message b",
trigger: '.modal-footer .o_form_button_save',
run: "click",
},
{
trigger: '.o_field_widget[name="message_concat"] textarea:value([test] Mitchell Admin:a\n[test] Mitchell Admin:b)',
},
{ // change content to trigger on change
content: "insert content",
trigger: '.o_field_widget[name=name] input',
run: "edit test_trigger && press Enter",
}, {
content: "check onchange",
trigger: '.o_field_widget[name="message_concat"] textarea:value([test_trigger] Mitchell Admin:a\n[test_trigger] Mitchell Admin:b)',
},
{ // change message b
content: "edit message b",
trigger: '.o_field_widget[name=messages] .o_data_cell:contains(/^b$/)',
run: "click",
}, {
content: "change the body",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit bbb",
}, {
content: "save changes",
trigger: '.modal-footer .o_form_button_save',
run: "click",
},
{
trigger: '.o_field_widget[name="message_concat"] textarea:value([test_trigger] Mitchell Admin:a\n[test_trigger] Mitchell Admin:bbb)',
},
{ // add message c
content: "create new message c",
trigger: '.o_field_widget[name=messages] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "insert body",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit c",
}, {
content: "save new message c",
trigger: '.modal-footer .o_form_button_save',
run: "click",
},
{
trigger: '.o_field_widget[name=messages] .o_data_row:eq(2)',
},
{ // add participants
content: "change tab to Participants",
trigger: '.o_notebook_headers .nav-item a:contains(Participants)',
run: "click",
}, {
content: "click to add participants",
trigger: '.o_field_widget[name=participants] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "select Demo User",
trigger: 'tr:has(td:contains(/^Marc Demo$/)) .o_list_record_selector input[type="checkbox"]',
run: "click",
},
{
trigger: 'tr:has(td:contains(/^Marc Demo$/)) .o_list_record_selector input[type="checkbox"]:checked',
},
{
content: "save selected participants",
trigger: '.o_select_button',
run: "click",
}, { // save
content: "save discussion",
trigger: 'button.o_form_button_save',
run: "click",
}, {
content: "go back to tab 1",
trigger: '.o_notebook_headers .nav-item a:contains(Messages)',
run: "click",
},
{
trigger: 'body:not(:has(.o_field_widget[name=messages] tbody .o_data_row:eq(3)))',
},
{ // check saved data
content: "check data 1",
trigger: '.o_content:has(.o_field_widget[name=messages] tbody .o_data_row:eq(2))',
}, {
content: "check data 2",
trigger: `.o_content:has(.o_field_widget[name=messages] tr:has(td:contains(/^bbb$/)):has(td:contains(/^\\[test_trigger\\] Mitchell Admin$/)))`,
}, {
content: "go to tab 3",
trigger: '.o_notebook_headers .nav-item a:contains(Participants)',
run: "click",
},
{
trigger: 'body:not(:has(.o_field_widget[name=participants] tbody .o_data_row:eq(3)))',
},
{
content: "check data 3",
trigger: '.o_content:has(.o_field_widget[name=participants] tbody .o_data_row:eq(2))',
},
{
trigger: '.o_form_editable',
},
{
content: "change tab to Messages",
trigger: '.o_notebook_headers .nav-item a:contains(Messages)',
run: "click",
},
{
trigger: '.o_notebook_headers .nav-link.active:contains(Messages)',
},
{ // add message d
content: "create new message d",
trigger: '.o_field_widget[name=messages] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "insert body",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit d",
}, {
content: "save new message d",
trigger: '.modal-footer .o_form_button_save',
run: "click",
},
{
trigger: '.o_field_widget[name=messages] .o_data_cell:contains(/^d$/)',
},
{ // add message e
content: "create new message e",
trigger: '.o_field_widget[name=messages] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "insert body",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit e",
}, {
content: "save new message e",
trigger: '.modal-footer .o_form_button_save',
run: "click",
},
{
trigger: '.o_field_widget[name=messages] .o_data_cell:contains(/^e$/)',
},
{ // change message a
content: "edit message a",
trigger: '.o_field_widget[name=messages] .o_data_cell:contains(/^a$/)',
run: "click",
}, {
content: "change the body",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit aaa",
}, {
content: "save changes",
trigger: '.modal-footer .o_form_button_save',
run: "click",
},
{
trigger: '.o_field_widget[name=messages] .o_data_cell:contains(/^aaa$/)',
},
{ // change message e
content: "edit message e",
trigger: '.o_field_widget[name=messages] .o_data_cell:contains(/^e$/)',
run: "click",
}, {
content: "open the many2one to select another user",
trigger: '.o_field_widget[name="author"] input',
run: "edit Marc",
}, {
content: "select another user",
trigger: '.o_field_widget[name="author"] .o-autocomplete--dropdown-menu li:contains(Marc Demo)',
run: "click",
}, {
content: "test one2many's line onchange after many2one",
trigger: '.o_field_widget[name=name]:contains([test_trigger] Marc Demo)',
}, {
content: "test one2many field not triggered onchange",
trigger: '.o_field_widget[name="message_concat"] textarea:value([test_trigger] Mitchell Admin:e)',
}, {
content: "save changes",
trigger: '.modal-footer .o_form_button_save',
run: "click",
}, {
content: "test one2many triggered the onchange on save for the line",
trigger: '.o_field_widget[name=messages] .o_data_cell:contains([test_trigger] Marc Demo)',
}, {
content: "test one2many triggered the onchange on save",
trigger: '.o_field_widget[name="message_concat"] textarea:value([test_trigger] Marc Demo:e)',
}, { // remove
content: "remove b",
trigger: '.o_field_widget[name=messages] .o_data_row:has(.o_data_cell:contains(/^bbb$/)) .o_list_record_remove',
run: "click",
}, {
content: "remove e",
trigger: '.o_field_widget[name=messages] .o_data_row:has(.o_data_cell:contains(/^e$/)) .o_list_record_remove',
run: "click",
},
{
trigger: 'body:not(:has(tr:has(td:contains(/^e$/))))',
},
{ // save
content: "save discussion",
trigger: 'button.o_form_button_save',
run: "click",
}, { // check saved data
content: "check data 4",
trigger: '.o_content:not(:has(.o_field_widget[name=messages] tbody tr:has(.o_list_record_remove):eq(4)))',
}, {
content: "check data 5",
trigger: '.o_content:has(.o_field_widget[name=messages] tbody:has(tr td:contains(/^aaa$/)):has(tr td:contains(/^c$/)):has(tr td:contains(/^d$/)))',
}, {
content: "check data 6",
trigger: `.o_content:has(.o_field_widget[name=messages] tbody tr:has(td:contains(/^\\[test_trigger\\] Mitchell Admin$/)):has(td:contains(/^aaa$/)))`,
}, {
content: "go to Participants",
trigger: '.o_notebook_headers .nav-item a:contains(Participants)',
run: "click",
},
{
trigger: '.o_content:not(:has(.o_field_widget[name=participants] tbody .o_data_row:eq(3)))',
},
{
content: "check data 7",
trigger: '.o_content:has(.o_field_widget[name=participants] tbody .o_data_row:eq(2))',
}, {
content: "go to Messages",
trigger: '.o_notebook_headers .nav-item a:contains(Messages)',
run: "click",
},
{
trigger: '.o_form_editable .o_field_widget[name=messages] tbody tr:has(td:contains(/^d$/))',
},
{ // add message ddd
content: "create new message ddd",
trigger: '.o_field_widget[name=messages] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "select another user",
trigger: '.o_field_widget[name=author] input',
run: "edit Marc",
}, {
content: "select demo user",
trigger: '.o_field_widget[name="author"] .o-autocomplete--dropdown-menu li:contains(Marc Demo)',
run: "click",
}, {
content: "test one2many's line onchange after many2one",
trigger: '.o_field_widget[name=name]:contains([test_trigger] Marc Demo)',
}, {
content: "insert body",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit ddd",
}, {
content: "save new message ddd",
trigger: '.modal-footer .o_form_button_save',
run: "click",
}, { // check onchange data
content: "check data 8",
trigger: '.o_field_widget[name="message_concat"] textarea:value([test_trigger] Mitchell Admin:aaa\n[test_trigger] Mitchell Admin:c\n[test_trigger] Mitchell Admin:d\n[test_trigger] Marc Demo:ddd)',
},
{
trigger: 'body:not(:has(.o_field_widget[name=messages] .o_data_row:eq(4)))',
},
{
content: "check data 9",
trigger: '.o_content:has(.o_field_widget[name=messages] .o_data_row:eq(3))',
},
{
trigger: '.o_field_widget[name=messages]:has(tr td:contains(/^ddd$/))',
},
...stepUtils.discardForm({ // cancel
content: "cancel change",
}),
/////////////////////////////////////////////////////////////////////////////////////////////
// Discussions 2
/////////////////////////////////////////////////////////////////////////////////////////////
{
content: "switch to the second form view to test one2many with editable list (toggle menu dropdown)",
trigger: 'button[data-menu-xmlid="test_new_api.menu_main"], li.o_extra_menu_items a i.fa-plus',
run: "click",
}, {
content: "switch to the second form view to test one2many with editable list (open submenu)",
trigger: '.dropdown-item[data-menu-xmlid="test_new_api.menu_discussions_2"]',
run: "click",
},
{
trigger: '.o_breadcrumb:contains(Discussions 2)',
},
{
content: "select previous created record",
trigger: 'td:contains(test_trigger):last',
run: "click",
},
{
trigger: ".o_form_editable",
},
{
content: "edit content",
trigger: '.o_field_widget[name=name] input',
run: "edit test_trigger2 && click body",
}, {
content: "click outside to trigger onchange",
trigger: '.o_form_sheet',
run: "click",
},
{
trigger: '.o_field_widget[name=messages]:contains(test_trigger2)',
},
{
content: "click on a field of the editable list to edit content",
trigger: '.o_field_widget[name=messages] .o_data_row:eq(1) td',
run: "click",
}, {
content: "change text value",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit ccc && click .o_selected_row",
}, {
content: "click on other field (trigger the line onchange)",
trigger: '.o_field_widget[name=messages] .o_field_many2one[name="author"] input',
run: 'click'
}, {
content: "test one2many's line onchange",
trigger: '.o_field_widget[name=messages] .o_selected_row td:eq(3):contains(3)',
}, {
content: "open the many2one to select an other user",
trigger: '.o_field_widget[name=messages] .o_field_many2one[name="author"] input',
run: "edit Marc",
}, {
content: "select an other user",
trigger: '.o_field_widget[name="author"] .o-autocomplete--dropdown-menu li:contains(Marc Demo)',
run: "click",
}, {
content: "test one2many's line onchange after many2one",
trigger: '.o_field_widget[name=messages] td:contains([test_trigger2] Marc Demo)',
}, {
content: "change text value",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit ccccc",
}, { // check onchange
content: "click outside to trigger one2many onchange",
trigger: '.o_field_widget[name=name] input',
run: 'click'
}, {
content: "test one2many onchange",
trigger: '.o_field_widget[name="message_concat"] textarea:value([test_trigger2] Marc Demo:ccccc)',
}, {
content: "click outside to trigger one2many onchange",
trigger: '.o_field_widget[name=categories] input',
run: "edit Test",
}, {
content: "add a tag",
trigger: '.o_field_widget[name="categories"] .o-autocomplete--dropdown-menu li a:first',
run: "click",
}, { // remove record
content: "delete the last item in the editable list",
trigger: '.o_field_widget[name=messages] .o_data_row td.o_list_record_remove button:visible:last',
run: "click",
}, {
content: "test one2many onchange after delete",
trigger: '.o_content:not(:has(.o_field_widget[name="message_concat"] textarea:value(Mitchell Admin:d)))',
},
{
trigger: 'body:not(:has(tr:has(td:contains(/^d$/))))',
},
...stepUtils.saveForm(),
{ // check saved data
content: "check data 10",
trigger: '.o_field_widget[name=message_concat] textarea:value([test_trigger2] Mitchell Admin:aaa\n[test_trigger2] Marc Demo:ccccc)',
},
{
trigger: 'body:not(:has(.o_field_widget[name=messages] tbody .o_data_row:eq(2)))',
},
{
content: "check data 11",
trigger: '.o_field_widget[name=messages] tbody .o_data_row:eq(1)',
},
{
trigger: '.o_form_editable .nav-link.active:contains(Messages)',
},
{ // add message eee
content: "create new message eee",
trigger: '.o_field_widget[name=messages] .o_field_x2many_list_row_add a',
run: "click",
}, {
content: "change text value",
trigger: '.o_field_widget[name="body"] textarea',
run: "edit eee",
},
{
trigger: '.o_field_widget[name="body"] textarea:value(eee)',
},
...stepUtils.saveForm(),
{ // check saved data
content: "check data 12",
trigger: '.o_field_widget[name="message_concat"] textarea:value([test_trigger2] Mitchell Admin:aaa\n[test_trigger2] Marc Demo:ccccc\n[test_trigger2] Mitchell Admin:eee)',
},
{
trigger: 'body:not(:has(.o_field_widget[name=messages] .o_data_row:eq(3)))',
},
{
content: "check data 13",
trigger: '.o_field_widget[name=messages] .o_data_row:eq(2)',
},
/////////////////////////////////////////////////////////////////////////////////////////////
// Discussions 3
/////////////////////////////////////////////////////////////////////////////////////////////
{
trigger: '.tab-pane:eq(0) .o_field_widget tbody .o_data_row:eq(2)',
},
{
content: "switch to the third form view to test onchange changing one2many (toggle menu dropdown)",
trigger: 'button[data-menu-xmlid="test_new_api.menu_main"], li.o_extra_menu_items a i.fa-plus',
run: "click",
}, {
content: "switch to the thied form view to test onchange changing one2many (open submenu)",
trigger: '.dropdown-item[data-menu-xmlid="test_new_api.menu_discussions_3"]',
run: "click",
}, {
content: "wait web client",
trigger: '.o_breadcrumb:contains(Discussions 3)',
run: "click",
}, {
content: "create new discussion",
trigger: 'button.o_list_button_add',
run: "click",
}, {
content: "set discussion title to generate dummy message",
trigger: '.o_field_widget[name=name] input',
run: "edit {generate_dummy_message} && click body",
},
{
trigger: '.o_field_widget[name=important_messages] .o_data_row .o_list_number:contains(/^13$/)',
},
{
content: "check new dummy message happened",
trigger: '.o_field_widget[name=messages] .o_data_row .o_list_number:contains(/^13$/)',
}, {
content: "check field not in embedded view received correctly",
trigger: '.o_field_widget[name=messages] .o_data_row input[type="checkbox"]:checked',
}, {
content: "empty discussion title",
trigger: '.o_field_widget[name=name] input',
run: "edit removed_title && click body",
}, {
content: "onchange happened",
trigger: '.o_field_widget[name=messages] .o_data_row td:contains([removed_title])',
}, {
content: "set discussion title to generate dummy message",
trigger: '.o_field_widget[name=name] input',
run: "edit {generate_dummy_message} && click body",
},
{
trigger: '.o_field_widget[name=important_messages] .o_data_row .o_list_number:contains(/^22$/)',
},
{
content: "check update and new dummy message happened",
trigger: '.o_field_widget[name=messages] .o_data_row .o_list_number:contains(/^22$/)',
},
...stepUtils.discardForm(),
]});