import { browser } from "@web/core/browser/browser"; import { registry } from "@web/core/registry"; import { randomString } from "@web_studio/utils"; import { assertEqual, stepNotInStudio } from "@web_studio/../tests/tours/tour_helpers"; const localStorage = browser.localStorage; let createdAppString = null; let createdMenuString = null; registry.category("web_tour.tours").add("web_studio_main_and_rename", { url: "/odoo?debug=1", steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", run: "click", }, { // the next steps are here to create a new app trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ".o_web_studio_app_creator_name > input", run: `edit ${(createdAppString = randomString(6))}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_menu_creator > input", run: `edit ${(createdMenuString = randomString(6))}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { // disable chatter in model configurator, we'll test adding it on later trigger: 'input[name="use_mail"]', run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { trigger: ".o_menu_toggle:not(.o_menu_toggle_back)", }, { // toggle the home menu outside of studio and come back in studio trigger: ".o_web_studio_leave > a.btn", timeout: 60000 /* previous step reloads registry, etc. - could take a long time */, run: "click", }, { trigger: `.o_web_client:not(.o_in_studio)` /* wait to be out of studio */, }, { trigger: ".o_menu_toggle:not(.o_menu_toggle_back)", timeout: 60000 /* previous step reloads registry, etc. - could take a long time */, run: "click", }, { trigger: ".o_home_menu_background", }, { trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { // open the app creator and leave it trigger: ".o_web_studio_new_app", run: "click", }, { trigger: ".o_web_studio_app_creator", }, { trigger: ".o_web_studio_leave > a.btn", run: "click", }, { // go back to the previous app trigger: ".o_home_menu", run: "press Escape", }, { trigger: `.o_web_client:not(.o_in_studio) .o_menu_brand:contains(${createdAppString})`, }, { // this should open the previous app outside of studio // go back to the home menu trigger: ".o_menu_toggle:not(.o_menu_toggle_back)", run: "click", }, { trigger: "input.o_search_hidden", // Open Command Palette run: `edit ${createdMenuString[0]}`, }, { trigger: ".o_command_palette_search input", run: `edit /${createdMenuString}`, }, { trigger: `.o_command.focused:contains(${createdAppString} / ${createdMenuString})`, }, { // search results should have been updated trigger: ".o_command_palette", // Close the Command Palette run: "press Escape", }, { // enter Studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_studio_home_menu", }, { // edit an app trigger: `.o_app[data-menu-xmlid*="studio"]:contains(${createdAppString})`, run: function () { // We can't emulate a hover to display the edit icon const editIcon = this.anchor.querySelector(".o_web_studio_edit_icon"); editIcon.style.visibility = "visible"; editIcon.click(); }, }, { // design the icon // TODO: we initially tested this (change an app icon) at the end but a // long-standing bug (KeyError: ir.ui.menu.display_name, caused by a registry // issue with multiple workers) on runbot prevent us from doing it. It thus have // been moved at the beginning of this test to avoid the registry to be reloaded // before the write on ir.ui.menu. trigger: ".o_web_studio_selector_background > button", run: "click", }, { trigger: ".o-dropdown--menu .o_web_studio_selector_value", run: "click", }, { trigger: ".modal-footer .btn.btn-primary", run: "click", }, { // click on the created app trigger: `.o_app[data-menu-xmlid*="studio"]:contains(${createdAppString})`, run: "click", }, { // create a new menu trigger: ".o_main_navbar .o_web_edit_menu", run: "click", }, { trigger: "footer.modal-footer .js_add_menu", run: "click", }, { trigger: 'input[name="menuName"]', run: `edit ${(createdMenuString = randomString(6))}`, }, { trigger: 'div.o_web_studio_menu_creator_model_choice input[value="existing"]', run: "click", }, { trigger: "div.o_web_studio_menu_creator_model .o_record_selector input", run: "edit a", }, { trigger: ".o_record_selector .o-autocomplete--dropdown-menu > li > a:not(:has(.fa-spin))", run: "click", }, { trigger: ".o_record_selector :not(.o-autocomplete dropdown-menu)", }, { trigger: ".o_web_studio_add_menu_modal button:contains(Confirm):not(.disabled)", run: "click", }, { trigger: ":not(.o_inactive_modal) .o-web-studio-appmenu-editor", }, { trigger: ".o-web-studio-appmenu-editor button:contains(Confirm):not(.disabled)", run: "click", }, { trigger: ".o_web_studio_menu", }, { // check that the Studio menu is still there // switch to form view trigger: '.o_web_studio_views_icons > a[title="Form"]', run: "click", }, { trigger: ".o_web_studio_form_view_editor", }, { // wait for the form editor to be rendered because the sidebar is the same // unfold 'Existing Fieldqs' section trigger: ".o_web_studio_existing_fields_header", run: "click", }, { // add an new field trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_char", run: "drag_and_drop .o_web_studio_form_view_editor .o_inner_group", }, { trigger: '.o_web_studio_sidebar input[name="technical_name"]', }, { // click on the field trigger: ".o_web_studio_form_view_editor .o_wrap_label:first label", // when it's there run: "click", }, { // rename the label trigger: '.o_web_studio_sidebar input[name="string"]', run: "edit My Coucou Field && click .o_web_studio_sidebar", }, { // verify that the field name has changed and change it trigger: '.o_web_studio_sidebar input[name="technical_name"]:value(my_coucou_field)', async run(helper) { await helper.edit("coucou"); await helper.click(".o_web_studio_sidebar"); }, // the rename operation (/web_studio/rename_field + /web_studio/edit_view) // takes a while and sometimes reaches the default 10s timeout timeout: 20000, }, { // click on "Add" tab trigger: ".o_web_studio_sidebar .o_web_studio_new", // the rename operation (/web_studio/rename_field + /web_studio/edit_view) // takes a while and sometimes reaches the default 10s timeout timeout: 20000, run: "click", }, { // add a new field trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_char", run: "drag_and_drop .o_web_studio_form_view_editor .o_inner_group", }, { // rename the field with the same name trigger: '.o_web_studio_sidebar input[name="technical_name"]', run: "edit coucou && click body", }, { // an alert dialog should be opened trigger: ".modal-footer > button:first", run: "click", }, { // rename the label trigger: '.o_web_studio_sidebar input[name="string"]', run: "edit COUCOU && click body", }, { // verify that the field name has changed (post-fixed by _1) trigger: '.o_web_studio_sidebar input[name="technical_name"]:value(coucou_1)', // the rename operation (/web_studio/rename_field + /web_studio/edit_view) // takes a while and sometimes reaches the default 10s timeout timeout: 20000, }, { trigger: ".o_web_studio_sidebar .o_web_studio_new", run: "click", }, { // add a monetary field --> create a currency field trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_monetary", run: "drag_and_drop (.o_inner_group:first .o_web_studio_hook:eq(1))", }, { // verify that the monetary field is in the view trigger: '.o_web_studio_form_view_editor .o_wrap_label:eq(1) label:contains("New Monetary")', }, { // switch the two first fields trigger: ".o_web_studio_form_view_editor .o_inner_group:first .o-draggable:eq(1)", run: "drag_and_drop .o_inner_group:first .o_web_studio_hook:first", }, { // click on "Add" tab trigger: '.o_web_studio_form_view_editor .o_wrap_label:eq(0) label:contains("New Monetary")', }, { trigger: ".o_web_studio_sidebar .o_web_studio_new", run: "click", }, { // verify that the fields have been switched trigger: '.o_web_studio_form_view_editor .o_wrap_label:eq(0) label:contains("New Monetary")', }, { // add a m2m field trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_many2many", run: "drag_and_drop .o_inner_group:first .o_web_studio_hook:first", }, { // type something in the modal trigger: '.modal:not(.o_inactive_modal) [name="relation_id"] input.o-autocomplete--input', // we are sure "Activity" exists since studio depends on mail. //Also, it is determinisic and field names should not conflict too much. run: "fill mail.activity", }, { // select Activity as model trigger: '.modal:not(.o_inactive_modal) [name="relation_id"] .o-autocomplete--dropdown-menu li a:not(:has(.fa-spin)):contains(Activity):not(:contains("Activity "))', run: "click", }, { trigger: ".modal:not(.o_inactive_modal) button:contains(Confirm):not(.disabled)", run: "click", }, { // select the m2m to set its properties trigger: ".o_wrap_input:has(.o_field_many2many)", timeout: 15000, // creating M2M relations can take some time... run: "click", }, { // change the `widget` attribute trigger: '.o_web_studio_sidebar input[name="widget"]', run: "click", }, { trigger: ".o-dropdown--menu .o_select_menu_item:contains('(many2many_tags)')", run: "click", }, { // use colors on the m2m tags trigger: '.o_web_studio_sidebar [name="color_field"]', run: "click", }, { // add a statusbar trigger: ".o_web_studio_statusbar_hook", run: "click", }, { trigger: ".modal-footer .btn.btn-primary", run: "click", }, { trigger: ".o_statusbar_status", run: "click", }, { // verify that a default value has been set for the statusbar trigger: '.o_web_studio_sidebar input[name="default_value"]:value(First Status)', }, { trigger: ".o_web_studio_views_icons a[aria-label=Form]", run: "click", }, { // verify Chatter can be added after changing view to form trigger: ".o_web_studio_add_chatter", }, { // edit action trigger: ".o_web_studio_menu .o_menu_sections button:contains(Views)", run: "click", }, { // edit form view trigger: ".o_web_studio_view_category .o_web_studio_thumbnail_item.o_web_studio_thumbnail_form", run: "click", }, { // verify Chatter can be added after changing view to form trigger: ".o_web_studio_add_chatter", }, { // switch in list view trigger: '.o_web_studio_menu .o_web_studio_views_icons a[title="List"]', run: "click", }, { // wait for the list editor to be rendered because the sidebar is the same trigger: ".o_web_studio_list_view_editor", }, { // unfold 'Existing Fieldqs' section trigger: ".o_web_studio_existing_fields_header", run: "click", }, { // add an existing field (display_name) trigger: ".o_web_studio_sidebar .o_web_studio_existing_fields_section .o_web_studio_field_char:contains(COUCOU)", run: "drag_and_drop .o_web_studio_list_view_editor th.o_web_studio_hook:first", }, { // verify that the field is correctly named trigger: '.o_web_studio_list_view_editor th:contains("COUCOU")', }, { // leave Studio trigger: ".o_web_studio_leave > a.btn", run: "click", }, { // come back to the home menu to check if the menu data have changed trigger: ".o_web_client:not(.o_in_studio)", }, { trigger: ".o_menu_toggle:not(.o_menu_toggle_back)", run: "click", }, { trigger: "input.o_search_hidden", // Open Command Palette run: `edit ${createdMenuString[0]}`, }, { trigger: ".o_command_palette_search input", run: `edit /${createdMenuString}`, }, { // search results should have been updated trigger: `.o_command.focused:contains(${createdAppString} / ${createdMenuString})`, }, { trigger: ".o_command_palette", // Close the Command Palette run: `press Escape`, }, { trigger: ".o_home_menu", // go back again to the app (using keyboard) run: `press Escape`, }, { // wait to be back in the list view trigger: ".o_list_view", }, { // re-open studio trigger: ".o_web_studio_navbar_item", run: "click", }, { // modify the list view trigger: ".o_web_studio_sidebar .o_web_studio_view", run: "click", }, { //select field you want to sort and based on that sorting will be applied on List view trigger: '.o_web_studio_sidebar input[name="sort_by"]', run: "click", }, { trigger: ".dropdown-menu .dropdown-item", run: "click", }, { //change order of sorting, Select order and change it trigger: '.o_web_studio_sidebar input[name="sort_order"]', run: "click", }, { trigger: ".dropdown-menu .dropdown-item:nth-child(2)", run: "click", }, { // edit action trigger: '.o_web_studio_menu .o_menu_sections button:contains("Views")', run: "click", }, { // add a kanban trigger: ".o_web_studio_view_category .o_web_studio_thumbnail_kanban.disabled", run: "click", }, { trigger: ".o_notebook .o_web_studio_new", run: "click", }, { // add a menu trigger: ".o_web_studio_component.o_web_studio_field_menu", async run(helpers) { const hook = ".o_web_studio_hook[data-structures='t,kanban_colorpicker']"; document.querySelector(hook).style.setProperty("transition", "none", "important"); await helpers.drag_and_drop(hook); }, }, { // add an aside trigger: ".o_web_studio_component.o_web_studio_field_aside", async run(helpers) { const hook = ".o_web_studio_hook[data-structures='aside']"; document.querySelector(hook).style.setProperty("transition", "none", "important"); await helpers.drag_and_drop(hook); }, }, { trigger: ".o_kanban_record main", content: "card content has been wrapped in a
element", }, { trigger: ".o_kanban_record aside", }, { // add a colorpicker trigger: ".o_web_studio_component.o_web_studio_field_color_picker", async run(helpers) { const hook = ".o_web_studio_hook[data-structures='t,kanban_colorpicker']"; document.querySelector(hook).style.setProperty("transition", "none", "important"); await helpers.drag_and_drop(hook); }, }, { // select the menu for edition trigger: ".o_dropdown_kanban", run: "click", }, { // select the colorpicker for edition trigger: "button.o_web_studio_field_color_picker:contains(Edit Color Picker)", run: "click", }, { trigger: ".o_notebook_content h3:contains(Field)", content: "sidebar is editing the color field", }, { trigger: ".o_notebook .o_web_studio_view", run: "click", }, { trigger: ".o_web_studio_property_highlight_color .o_select_menu_toggler:value(Card color)", }, { // edit action trigger: '.o_web_studio_menu .o_menu_sections button:contains("Views")', run: "click", }, { // check that the kanban view is now active trigger: ".o_web_studio_view_category .o_web_studio_thumbnail_kanban:not(.disabled)", }, { // add an activity view trigger: ".o_web_studio_view_category .o_web_studio_thumbnail_activity.disabled", run: "click", }, { trigger: ".o_activity_view", }, { // edit action trigger: '.o_web_studio_menu .o_menu_sections button:contains("Views")', timeout: 20000, // activating a view takes a while and sometimes reaches the default 10s timeout run: "click", }, { // add a graph view trigger: ".o_web_studio_view_category .o_web_studio_thumbnail_graph.disabled", run: "click", }, { trigger: ".o_graph_renderer", }, { trigger: '.o_web_studio_menu .o_menu_sections button:contains("Views")', run: "click", }, { trigger: ".o_web_studio_views", }, { run: "click", // edit the search view trigger: ".o_web_studio_view_category .o_web_studio_thumbnail_item.o_web_studio_thumbnail_search", }, { trigger: ".o_web_studio_search_view_editor", }, { run: "click", trigger: ".o_menu_toggle:not(.o_menu_toggle_back)", }, { // export all modifications trigger: ".o_web_studio_export", run: "click", }, { content: "check that export feature is blazing fast", trigger: ".modal .modal-footer button:contains(export)", run: "click", }, { content: "modal is closed", trigger: ":not(.modal)", }, { // click on the created app trigger: '.o_app[data-menu-xmlid*="studio"]:last', run: "click", }, { // switch to form view trigger: '.o_web_studio_views_icons > a[title="Form"]', run: "click", }, { trigger: ".o_web_studio_form_view_editor", }, { // click on the view tab trigger: ".o_web_studio_view", run: "click", }, { // click on the restore default view button trigger: ".o_web_studio_restore", run: "click", }, { // click on the ok button trigger: ".modal-footer .btn.btn-primary", run: "click", }, { // checks that the field doesn't exist anymore trigger: ".o_web_studio_form_view_editor:not(:has(.o_form_label))", }, { trigger: ".o_web_studio_leave > a.btn", run: "click", }, ...stepNotInStudio(".o_form_view"), ], }); registry.category("web_tour.tours").add("web_studio_rename", { url: "/odoo?debug=1", steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", run: "click", }, { // the next steps are here to create a new app trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ".o_web_studio_app_creator_name > input", run: `edit ${(createdAppString = randomString(6))}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_menu_creator > input", run: `edit ${(createdMenuString = randomString(6))}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { trigger: ".o_menu_toggle:not(.o_menu_toggle_back)", }, { // wait for the form editor to be rendered because the sidebar is the same // unfold 'Existing Fields' section trigger: ".o_web_studio_existing_fields_header", run: "click", }, { // add an new field trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_char", run: "drag_and_drop .o_web_studio_form_view_editor .o_inner_group", }, { trigger: '.o_web_studio_sidebar input[name="technical_name"]', }, { // click on the field trigger: ".o_web_studio_form_view_editor .o_wrap_label:first label", // when it's there run: "click", }, { // rename the label trigger: '.o_web_studio_sidebar input[name="string"]', run: "edit السَّلَامُ عَلَيْكُمْ && click .o_web_studio_sidebar", }, // stepNextTick(), { // verify that the field name has changed trigger: '.o_web_studio_sidebar input[name="string"]:value(السَّلَامُ عَلَيْكُمْ)', // the rename operation (/web_studio/rename_field + /web_studio/edit_view) // takes a while and sometimes reaches the default 10s timeout timeout: 20000, }, { // verify that the technical name hasn't changed trigger: '.o_web_studio_sidebar input[name="technical_name"]', run(_) { const { value } = this.anchor; if (!value.startsWith("char_field_")) { throw new Error( `Assert failed: expected string to starts with "char_field+", got: "${value}"` ); } }, }, { trigger: ".o_web_studio_snackbar .fa-check", run() {}, }, ], }); registry.category("web_tour.tours").add("web_studio_hide_fields_tour", { url: "/odoo/action-studio?mode=home_menu&debug=1", steps: () => [ { trigger: ".o_web_studio_new_app", run: "click", }, { trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ` .o_web_studio_app_creator_name > input`, run: `edit ${randomString(6)}`, }, { // make another interaction to show "next" button trigger: ` .o_web_studio_selectors .o_web_studio_selector_icon > button`, run: "click", }, { trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ` .o_web_studio_menu_creator > input`, run: `edit ${randomString(6)}`, }, { trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { // check that the Studio menu is still there trigger: ".o_web_studio_menu", }, { trigger: ".o_web_studio_leave > a.btn", timeout: 60000 /* previous step reloads registry, etc. - could take a long time */, run: "click", }, { trigger: ".oe_title input", run: "edit Test", }, { trigger: ".o_form_button_save", run: "click", }, { trigger: ".o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_menu", }, { run: "click", trigger: ` .o_web_studio_views_icons > a[title="List"]`, }, { // wait for the list editor to be rendered because the sidebar is the same trigger: ".o_web_studio_list_view_editor", }, { trigger: ".o_web_studio_existing_fields_header", run: "click", }, { trigger: ` .o_web_studio_sidebar .o_web_studio_existing_fields .o_web_studio_component:has(.o_web_studio_component_description:contains(display_name))`, run: "drag_and_drop .o_web_studio_list_view_editor .o_web_studio_hook", }, { trigger: ` .o_list_table th[data-name="display_name"]`, run: "click", }, { trigger: ` .o_web_studio_sidebar input[name="optional"]`, run: "click", }, { trigger: ".o-dropdown--menu .o_select_menu_item:contains(Hide by default)", run: "click", }, { trigger: '.o_list_table:not(:has(th[data-name="display_name"]))', }, { trigger: ` .o_web_studio_sidebar .o_web_studio_view`, run: "click", }, { trigger: ` .o_web_studio_sidebar_checkbox input#show_invisible`, run: "click", }, { trigger: ` .o_list_table th[data-name="display_name"].o_web_studio_show_invisible`, }, { trigger: ".o_web_studio_leave > a.btn", run: "click", }, ...stepNotInStudio(".o_list_view"), ], }); registry.category("web_tour.tours").add("web_studio_model_option_value_tour", { url: "/odoo/action-studio?mode=home_menu&debug=tests", steps: () => [ { trigger: ".o_web_studio_new_app", run: "click", }, { trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ` .o_web_studio_app_creator_name > input`, run: `edit ${randomString(6)}`, }, { trigger: ` .o_web_studio_selectors .o_web_studio_selector_icon > button`, run: "click", }, { trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ` .o_web_studio_menu_creator > input`, run: `edit ${randomString(6)}`, }, { trigger: ".o_web_studio_app_creator_next", run: "click", }, { // check monetary value in model configurator trigger: 'input[name="use_value"]', run: "click", }, { // check lines value in model configurator trigger: 'input[name="lines"]', run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { trigger: '.o_web_studio_menu .o_web_studio_views_icons > a[title="Graph"]', timeout: 60000 /* previous step reloads registry, etc. - could take a long time */, run: "click", }, { // wait for the graph editor to be rendered and also check for sample data trigger: ".o_view_sample_data .o_graph_renderer", }, { trigger: '.o_web_studio_menu .o_web_studio_views_icons a[title="Pivot"]', run: "click", }, { // wait for the pivot editor to be rendered and also check for sample data trigger: ".o_pivot_view .o_view_sample_data .o_view_nocontent_empty_folder", }, { trigger: ".o_web_studio_leave > a.btn", run: "click", }, ...stepNotInStudio(".o_pivot_view"), ], }); registry.category("web_tour.tours").add("web_studio_new_submenu_tour", { url: "/odoo", steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: "body.o_in_studio", }, { // click on the created app trigger: '.o_app[data-menu-xmlid*="studio"]:first', run: "click", }, { // create a new menu trigger: ".o-studio--menu .o_web_create_new_model", run: "click", }, { trigger: "input[name=model_name]", run: `edit second menu ${randomString(6)}`, }, { trigger: ".confirm_button", run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { // leave studio trigger: ".o_web_studio_leave > a.btn", run: "click", }, { trigger: ".o_web_client:not(.o_in_studio)", }, { // open studio again to check the new menu can be edited trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { // check we are back in studio trigger: ".o_in_studio", }, ], }); registry.category("web_tour.tours").add("web_studio_new_report_tour", { url: "/odoo", steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: "body.o_in_studio", }, { // click on the created app trigger: '.o_app[data-menu-xmlid*="studio"]:first', run: "click", }, { // edit reports trigger: ".o_web_studio_menu button:contains(Reports)", run: "click", }, { // create a new report trigger: ".o_control_panel .o-kanban-button-new", run: "click", }, { // select external layout trigger: '.o_web_studio_report_layout_dialog div[data-layout="web.external_layout"]', run: "click", }, { // edit report name trigger: '.o_web_studio_sidebar input[id="name"]', run: "edit My Awesome Report && click body", }, { // add a new group on the node trigger: '.o_web_studio_sidebar .o_field_many2many_tags[name="group_ids"] input', run: "click", }, { trigger: ".o-autocomplete--dropdown-menu li:contains(Administrator)", run: "click", }, { // wait for the group to appear trigger: '.o_web_studio_sidebar .o_field_many2many_tags[name="group_ids"] .o_tag_badge_text:contains(Administrator)', }, { // Focus the editable area trigger: ".o-web-studio-report-editor-wysiwyg :iframe .odoo-editor-editable div.page div", run: "click", }, { trigger: ".o-web-studio-report-editor-wysiwyg :iframe .odoo-editor-editable div.page div", run() { this.anchor.ownerDocument.getSelection().setPosition(this.anchor); assertEqual( this.anchor.outerHTML, `

` ); }, }, { trigger: ".o-web-studio-report-editor-wysiwyg :iframe .odoo-editor-editable div.page div", run() { assertEqual(this.anchor.classList.contains("o-we-hint"), true); }, }, { trigger: ".o-web-studio-report-editor-wysiwyg :iframe .odoo-editor-editable div.page div", run: "editor some new text", }, { trigger: ".o_web_studio_menu .o-web-studio-save-report.btn-primary", run: "click", }, { // The report has been saved trigger: ".o_web_studio_menu .o-web-studio-save-report:not(.btn-primary):not(:visible)", }, { trigger: ".o_web_studio_breadcrumb .o_back_button:contains(Reports)", run: "click", }, { content: "open the dropdown", trigger: ".o_kanban_record:contains(My Awesome Report) .dropdown-toggle:not(:visible)", run: "click", }, { // duplicate the report trigger: ".dropdown-menu a:contains(Duplicate)", run: "click", }, { // open the duplicate report trigger: ".o_kanban_record:contains(My Awesome Report copy(1))", run: "click", }, { // switch to 'Report' tab trigger: ".o_web_studio_sidebar input[id='name']", run() { assertEqual(this.anchor.value, "My Awesome Report copy(1)"); }, }, { trigger: ".o-web-studio-report-editor-wysiwyg :iframe div.page div", run() { assertEqual(this.anchor.textContent, "some new text"); }, }, { trigger: '.o_web_studio_sidebar .o_field_many2many_tags[name="group_ids"] .o_tag_badge_text:contains(Administrator)', }, { trigger: ".o_web_studio_leave > a.btn", run: "click", }, ...stepNotInStudio(), ], }); registry.category("web_tour.tours").add("web_studio_new_report_basic_layout_tour", { url: "/odoo", steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: "body.o_in_studio", }, { // click on the created app trigger: '.o_app[data-menu-xmlid*="studio"]:first', run: "click", }, { // edit reports trigger: ".o_web_studio_menu button:contains(Reports)", run: "click", }, { // create a new report trigger: ".o_control_panel .o-kanban-button-new", run: "click", }, { // select basic layout trigger: '.o_web_studio_report_layout_dialog div[data-layout="web.basic_layout"]', run: "click", }, { // edit report name trigger: '.o_web_studio_sidebar input[id="name"]', run: "edit My Awesome basic layout Report && click body", }, { // add a new group on the node trigger: '.o_web_studio_sidebar .o_field_many2many_tags[name="group_ids"] input', run: "click", }, { trigger: ".o-autocomplete--dropdown-menu li:contains(Administrator)", run: "click", }, { // wait for the group to appear trigger: '.o_web_studio_sidebar .o_field_many2many_tags[name="group_ids"] .o_tag_badge_text:contains(Administrator)', }, { trigger: ".o_web_studio_menu .o-web-studio-save-report.btn-primary", run: "click", }, { // The report has been saved trigger: ".o_web_studio_menu .o-web-studio-save-report:not(.btn-primary):not(:visible)", }, { // leave the report trigger: ".o_web_studio_breadcrumb .o_back_button:contains(Reports)", run: "click", }, { content: "open the dropdown", trigger: ".o_kanban_record:contains(My Awesome basic layout Report)", run: "hover && click .o_kanban_record:contains(My Awesome basic layout Report) .dropdown-toggle", }, { // duplicate the report trigger: ".dropdown-menu .dropdown-item:contains(Duplicate)", run: "click", }, { // open the duplicate report trigger: ".o_kanban_record:contains(My Awesome basic layout Report copy(1))", run: "click", }, { trigger: '.o_web_studio_sidebar input[id="name"]', run() { assertEqual(this.anchor.value, "My Awesome basic layout Report copy(1)"); }, }, { trigger: ".o_web_studio_leave > a.btn", run: "click", }, ...stepNotInStudio(), ], }); registry.category("web_tour.tours").add("web_studio_approval_tour", { url: "/odoo?debug=1", steps: () => [ { // go to Apps menu trigger: '.o_app[data-menu-xmlid="base.menu_management"]', run: "click", }, { trigger: ".o_cp_switch_buttons", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { // switch to form view editor trigger: '.o_web_studio_views_icons > a[title="Form"]', run: "click", }, { trigger: ".o_web_studio_form_view_editor", }, { trigger: ".o_web_studio_sidebar .o_web_studio_view", run: "click", }, { trigger: ".o_web_studio_sidebar #show_invisible", run: "click", }, { content: "click on first button it finds that has a node id", trigger: ".o_web_studio_form_view_editor button[name='button_immediate_upgrade'].o-web-studio-editor--element-clickable", run: "click", }, { // enable approvals for the button trigger: '.o_web_studio_sidebar_approval [name="create_approval_rule"]', run: "click", }, { trigger: ".o_web_studio_snackbar .fa-check", }, { // add approval rule trigger: '.o_web_studio_sidebar_approval [name="create_approval_rule"]', run: "click", }, { // set approval message trigger: '.o_web_studio_sidebar_approval input[name*="approval_message"]', run: "edit nope", }, { trigger: ".o_studio_sidebar_approval_rule:eq(1)", }, { // set domain on first rule trigger: ".o_web_studio_sidebar_approval .o_approval_domain", run: "click", }, { // set stupid domain that is always truthy trigger: ".o_domain_selector_debug_container textarea", run: function () { this.anchor.focus(); this.anchor.value = '[["id", "!=", False]]'; this.anchor.dispatchEvent(new Event("change", { bubbles: true })); }, }, { // save domain and close modal trigger: " .modal-footer .btn-primary", run: "click", }, { trigger: ".o_web_studio_snackbar .fa-check", }, { // add second approval rule when the first is set trigger: '.o_web_studio_sidebar_approval [name="create_approval_rule"]', run: "click", }, { trigger: ".o_web_studio_snackbar .fa-check", }, { // enable 'force different users' for one rule (doesn't matter which) trigger: '.o_web_studio_sidebar label[for*="exclusive_user"]', run: "click", }, { // switch to kanban view editor trigger: '.o_web_studio_views_icons > a[title="Kanban"]', run: "click", }, { // leave studio trigger: ".o_web_studio_leave > a.btn", run: "click", }, { trigger: ".o_web_client:not(.o_in_studio)", }, { // TODO: add breacrumb to access multi-record view when closing studio and close studio from form instead of from kanban // trigger: ".o_breadcrumb .o_back_button", trigger: "body", }, { trigger: ".o_searchview_dropdown_toggler", run: "click", }, { trigger: ".o-dropdown-item:contains(Installed)", run: "click", }, { trigger: ".o_searchview_input", run: "edit web_studio", }, { trigger: ".dropdown-item:contains(Search Module for)", run: "click", }, { trigger: ".o_kanban_record:not(.o_kanban_ghost):only", }, { content: "open first record (should be the one that was used, so the button should be there)", trigger: ".o_kanban_view .o_kanban_record:not(.o_kanban_ghost):not(:has(button[name='button_immediate_install'])) .o_dropdown_kanban .dropdown-toggle", run: "click", }, { trigger: ".o-dropdown--menu .dropdown-item", run: "click", }, { // try to do the action trigger: "button[name='button_immediate_upgrade']", run: "click", }, { // there should be a warning trigger: ".o_notification_bar.bg-warning", run: "click", }, { trigger: ".breadcrumb .o_back_button", run: "click", }, { trigger: "body .o_modules_kanban", }, ], }); registry.category("web_tour.tours").add("web_studio_custom_field_tour", { url: "/odoo", steps: () => [ { // go to Apps menu trigger: '.o_app[data-menu-xmlid="base.menu_management"]', run: "click", }, { // click on the list view trigger: ".o_switch_view.o_list", run: "click", }, { // click on optional column dropdown trigger: ".o_optional_columns_dropdown_toggle", run: "click", }, { // click on add custom field trigger: ".dropdown-item-studio", run: "click", }, { trigger: ".o_web_client.o_in_studio", }, { // go to home menu trigger: ".o_menu_toggle", run: "click", }, { //leave studio trigger: ".o_web_studio_leave > a.btn", run: "click", }, { trigger: ".o_web_client:not(.o_in_studio)", }, { // studio left. trigger: '.o_app[data-menu-xmlid="base.menu_management"]', run: "click", }, ], }); registry.category("web_tour.tours").add("web_studio_local_storage_tour", { url: "/odoo", steps: () => [ { trigger: '.o_app[data-menu-xmlid="base.menu_management"]', run: function () { localStorage.setItem("openStudioOnReload", "main"); window.location.reload(); }, expectUnloadPage: true, }, { trigger: ".o_web_client.o_in_studio", }, { // should be directly in studio mode trigger: '.o_app[data-menu-xmlid="base.menu_management"]', run: "click", }, { trigger: ".o_menu_toggle", run: "click", }, { trigger: ".o_web_studio_leave > a.btn", run: "click", }, { trigger: ".o_web_client:not(.o_in_studio)", }, { // studio left. trigger: '.o_app[data-menu-xmlid="base.menu_management"]', run: function () { window.location.reload(); }, expectUnloadPage: true, }, { trigger: ".o_web_client:not(.o_in_studio)", }, { // studio left after refresh. trigger: '.o_app[data-menu-xmlid="base.menu_management"]', run: "click", }, ], }); registry.category("web_tour.tours").add("web_studio_custom_background_tour", { url: "/odoo", steps: () => [ { content: "class for custom background must be enabled (outside studio)", trigger: ".o_home_menu_background_custom.o_home_menu_background:not(.o_in_studio)", run: () => null, }, { content: "opening studio", trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { content: "class for custom background must be enabled (in studio)", trigger: ".o_home_menu_background_custom.o_home_menu_background.o_in_studio", run: () => null, }, { content: "reset the background", trigger: ".o_web_studio_reset_default_background", run: "click", }, { content: "validate the reset of the background", trigger: ".modal-dialog .btn-primary", run: "click", expectUnloadPage: true, }, { content: "class for custom background must be disabled (inside studio)", trigger: ".o_home_menu_background.o_in_studio:not(.o_home_menu_background_custom)", run: () => null, }, { content: "leaving studio", trigger: ".o_web_studio_leave a", run: "click", }, { content: "class for custom background must be disabled (outside studio)", trigger: ".o_home_menu_background:not(.o_in_studio.o_home_menu_background_custom)", run: () => null, }, ], }); registry.category("web_tour.tours").add("web_studio_create_app_with_pipeline_and_user_assignment", { steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", run: "click", }, { // the next steps are here to create a new app trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ".o_web_studio_app_creator_name > input", run: `edit ${(createdAppString = randomString(6))}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_menu_creator > input", run: `edit ${(createdAppString = randomString(6))}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: "input#use_stages", run: "click", }, { trigger: "input#use_responsible", run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { trigger: ".o_web_studio_editor .o_menu_sections button:contains(Views)", run: "click", }, { trigger: ".o_web_studio_thumbnail_item.o_web_studio_thumbnail_kanban", run: "click", }, { trigger: ".o_web_studio_kanban_view_editor", }, { trigger: ".o_avatar.o_m2o_avatar", run() { const avatarImg = document.querySelector(".o_avatar.o_m2o_avatar a"); if (!avatarImg.getAttribute("title") === "Assign") { throw new Error( "It should be possible to assign a record, when no one is currently selected" ); } }, }, ], }); registry.category("web_tour.tours").add("web_studio_alter_field_existing_in_multiple_views_tour", { steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item button", run: "click", }, { trigger: ".o_web_studio_new_app", run: "click", }, { // the next steps are here to create a new app trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ".o_web_studio_app_creator_name > input", run: `edit ${(createdAppString = randomString(6))}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_menu_creator > input", run: `edit ${createdAppString}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { trigger: ".o_web_studio_sidebar", }, { // unfold 'Existing Fieldqs' section trigger: ".o_web_studio_existing_fields_header", timeout: 60000, run: "click", }, { // add an existing field (the one we created) trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(2) .o_web_studio_field_many2many:contains(Followers (Partners))", run: "drag_and_drop .o_inner_group:first .o_web_studio_hook:first", }, { trigger: ".o_web_studio_new ", run: "click", }, { trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_many2many", run: "drag_and_drop div.o_web_studio_hook:last", }, { trigger: ".modal-body", }, { trigger: '.modal:not(.o_inactive_modal) [name="relation_id"] input', run: `edit ${createdAppString}`, }, { // select the first model trigger: ".modal:not(.o_inactive_modal) .o-autocomplete--dropdown-menu > li > a:not(:has(.fa-spin))", run: "click", }, { trigger: "button:contains(Confirm)", run: "click", }, { // edit list view trigger: ".o_web_studio_editX2Many", run: "click", }, { // wait for list view to be loaded trigger: ".o_web_studio_list_view_editor", }, { // go to view trigger: ".o_web_studio_view ", run: "click", }, { // show invisible elements trigger: 'label[for="show_invisible"]', run: "click", }, { trigger: ".o_web_studio_new ", run: "click", }, { // unfold 'Existing Fieldqs' section trigger: ".o_web_studio_existing_fields_header", run: "click", }, { // add an existing field (the one we created) trigger: ".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_many2many:contains(Followers (Partners))", run: "drag_and_drop .o_web_studio_list_view_editor th.o_web_studio_hook:first", }, { // select field trigger: "th[data-name='message_partner_ids']", run: "click", }, { // make it invisible trigger: "#invisible", run: "click", }, { trigger: ".o_web_studio_snackbar .fa.fa-check", }, { // check if the invisible option is checked trigger: "#invisible:checked", }, ], }); const buttonToogleStudio = { trigger: `button[title="Toggle Studio"]`, run: "click", }; const addActionButtonSteps = ( ActionLabel = "web_studio_new_button_action_name", ActionName = "Privacy Lookup" ) => [ { trigger: ".o-web-studio-editor--add-button-action", run: "click", }, { trigger: ".o_web_studio_property input[name='string']", run: `edit ${ActionLabel}`, }, { trigger: ".o_web_studio_property input[name='name']", run: "click", }, { trigger: `.o_select_menu_menu .o_select_menu_item:contains(${ActionName})`, run: "click", }, ]; const addMethodButtonSteps = () => [ { trigger: ".o-web-studio-editor--add-button-action", run: "click", }, { trigger: ".o_web_studio_property input[name='string']", run: `edit test`, }, { trigger: ".o_web_studio_property input[name='type']", run: "click", }, { trigger: ".o_select_menu_menu .o_select_menu_item:contains(Call a method)", run: "click", }, { trigger: ".o_web_studio_property input[name='name']", run: `edit demo && click body`, }, ]; registry.category("web_tour.tours").add("web_studio_add_button_type_object", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, ...addMethodButtonSteps(), ], }); registry.category("web_tour.tours").add("web_studio_test_create_action_button_in_form_view", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, ...addActionButtonSteps(), { trigger: ".o_web_studio_leave a", run: "click", }, ...stepNotInStudio(".o_form_view"), ], }); registry .category("web_tour.tours") .add("web_studio_test_create_second_action_button_in_form_view", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, ...addActionButtonSteps("web_studio_other_button_action_name", "Download (vCard)"), { trigger: ".o_web_studio_leave a", run: "click", }, ...stepNotInStudio(".o_form_view"), ], }); registry.category("web_tour.tours").add("web_studio_test_create_action_button_in_list_view", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, { trigger: ".o_web_studio_views_icons a[aria-label='List']", run: "click", }, { trigger: ".o_optional_columns_dropdown button", run: "click", }, ...addActionButtonSteps(), { trigger: ".o_web_studio_leave a", run: "click", }, ...stepNotInStudio(".o_list_view"), ], }); registry.category("web_tour.tours").add("web_studio_test_remove_action_button_in_form_view", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, { trigger: 'button[studioxpath="/form[1]/header[1]/button[1]"]', run: "click", }, { trigger: "button.o_web_studio_remove", run: "click", }, { trigger: "footer.modal-footer>button.btn-primary", run: "click", }, { trigger: ".o_web_studio_leave a", run: "click", }, ...stepNotInStudio(".o_form_view"), ], }); registry.category("web_tour.tours").add("web_studio_test_remove_action_button_in_list_view", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, { trigger: ".o_web_studio_views_icons a[aria-label='List']", run: "click", }, { trigger: ".o_optional_columns_dropdown button", run: "click", }, { trigger: 'button[studioxpath="/list[1]/header[1]/button[1]"]', run: "click", }, { trigger: "button.o_web_studio_remove", run: "click", }, { trigger: "footer.modal-footer>button.btn-primary", run: "click", }, { trigger: ".o_web_studio_leave a", run: "click", }, ...stepNotInStudio(".o_list_view"), ], }); registry.category("web_tour.tours").add("web_studio_monetary_create", { url: "/odoo?debug=1", steps: () => [ // This tour drag&drop a monetary field and verify that a currency is created { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", }, { trigger: ".o_app[data-menu-xmlid='web_studio.studio_app_menu']", run: "click", }, // drag&drop a monetary and verify that the currency is in the view { // add a new monetary field trigger: ".o_web_studio_sidebar .o_web_studio_field_monetary", run: "drag_and_drop .o_web_studio_form_view_editor .o_inner_group", }, { // verify that the currency is set trigger: ".o_web_studio_sidebar .o_web_studio_property_currency_field input", run() { assertEqual(this.anchor.value, "Currency (x_studio_currency_id)"); }, }, { // currency field is in the view trigger: ".o_web_studio_view_renderer div[data-field-name='x_studio_currency_id']", run: "click", }, { trigger: ".o_web_studio_properties.active", }, ], }); registry.category("web_tour.tours").add("web_studio_monetary_change_currency_name", { url: "/odoo?debug=1", steps: () => [ // Changing currency name also change the currency name in the monetary currency selection { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", }, { trigger: ".o_app[data-menu-xmlid='web_studio.studio_app_menu']", run: "click", }, { // currency field is in the view and click on it trigger: ".o_web_studio_view_renderer [data-field-name='x_studio_currency_test']", run: "click", }, { // change the currency name trigger: "input[name='string']", run: "edit NewCurrency && click body", }, { // click on monetary trigger: "div[data-field-name^='x_studio_monetary_test']", run: "click", }, { // verify that the currency name changed in the monetary field trigger: ".o_web_studio_sidebar .o_web_studio_property_currency_field input", run() { assertEqual(this.anchor.value, "NewCurrency (x_studio_currency_test)"); }, }, ], }); registry.category("web_tour.tours").add("web_studio_related_monetary_creation", { url: "/odoo?debug=1", steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", }, { trigger: ".o_app[data-menu-xmlid='web_studio.studio_app_menu']", run: "click", }, { // add a new related field trigger: ".o_web_studio_sidebar .o_web_studio_field_related", run: "drag_and_drop .o_web_studio_form_view_editor .o_inner_group", }, { trigger: ".o_model_field_selector_value", run: "click", }, { trigger: ".o_model_field_selector_popover_search input", run: "edit X Test", }, { run: "click", trigger: ".o_model_field_selector_popover_item[data-name='x_test'] .o_model_field_selector_popover_item_relation", }, { trigger: ".o_model_field_selector_popover_search input", run: "edit X Studio Monetary Test", }, { run: "click", trigger: ".o_model_field_selector_popover_item[data-name='x_studio_monetary_test'] button", }, { trigger: ".modal-footer button.btn-primary", run: "click", }, { // The related monetary is created trigger: ".o_web_studio_view_renderer .o_form_label:contains('X Studio Monetary Test')", run: "click", }, { // The currency is created trigger: ".o_web_studio_view_renderer [data-field-name='x_studio_x_test_x_studio_currency_test']", }, ], }); registry.category("web_tour.tours").add("web_studio_monetary_change_currency_field", { url: "/odoo", steps: () => [ // Change currency and verify that the view take the changes into account (the dollar appears) { // open the custom app form view trigger: "a[data-menu-xmlid='web_studio.studio_app_menu']", run: "click", }, { // fill the required char input trigger: ".o_field_char input", run: "edit title", }, { // fill the new currency (many2one) input #1 trigger: "div [name='x_studio_currency_test2'] input", run: "edit USD", }, { // add a new currency field step #2 trigger: '.ui-menu-item a:contains("USD")', run: "click", }, { // save the view form trigger: "button.o_form_button_save", run: "click", }, { trigger: ".o_form_saved", }, { // open studio with the record trigger: ".o_main_navbar .o_web_studio_navbar_item button", run: "click", }, { // check that there is no currency symbol in renderer trigger: "div[name='x_studio_monetary_test'] span", run() { assertEqual(this.anchor.textContent, "0.00"); }, }, { // click on the monetary field trigger: "div[data-field-name='x_studio_monetary_test']", run: "click", }, { // change the currency_field in the monetary trigger: ".o_web_studio_sidebar .o_web_studio_property_currency_field input", run: "click", }, { // click on the second currency, which is "X Studio Currency Test2" trigger: ".o-dropdown--menu .o_select_menu_item:nth-of-type(2)", run: "click", }, { //wait until the currency has been set (also test the reactivity) trigger: ".o_web_studio_sidebar .o_web_studio_property_currency_field input:value('X Studio Currency Test2')", }, { // by changing the currency, we should have a $ symbol in the renderer trigger: "div[name^='x_studio_monetary'] span", run() { assertEqual(this.anchor.textContent, "$ 0.00"); }, }, ], }); registry.category("web_tour.tours").add("web_studio_monetary_change_currency_not_in_view", { url: "/odoo", steps: () => [ // Change a currency that is not present in the view insert it in the view { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", }, { trigger: ".o_app[data-menu-xmlid='web_studio.studio_app_menu']", run: "click", }, { // click on the monetary field trigger: "div[data-field-name='x_studio_monetary_test']", run: "click", }, { // change the currency_field in the monetary trigger: ".o_web_studio_sidebar .o_web_studio_property_currency_field input", run: "click", }, { // click on the second currency, which is "X Studio Currency Test2" trigger: ".o-dropdown--menu .o_select_menu_item:nth-of-type(2)", run: "click", }, { // wait until the currency has been set trigger: ".o_web_studio_sidebar .o_web_studio_property_currency_field input:value('X Studio Currency Test2')", }, { // go to view tab trigger: ".o_web_studio_view", run: "click", }, { // currency field is in the view and click on it trigger: ".o_web_studio_view_renderer div[data-field-name='x_studio_currency_test2']", run: "click", }, { trigger: ".o_web_studio_properties.active", }, ], }); registry.category("web_tour.tours").add("web_studio_monetary_add_existing_monetary", { url: "/odoo?debug=1", steps: () => [ // Add an existing monetary trough the "existing fields" and verify that the currency // is added to the view { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", }, { trigger: ".o_app[data-menu-xmlid='web_studio.studio_app_menu']", run: "click", }, { // click on "existing fields" trigger: ".o_web_studio_existing_fields_header", run: "click", }, { // add the existing monetary field trigger: ".o_web_studio_existing_fields_section .o_web_studio_field_monetary", run: "drag_and_drop .o_form_renderer .o_web_studio_hook", }, { // monetary exist and click on monetary trigger: "div[data-field-name='x_studio_monetary_test']", run: "click", }, { // verify that the currency name changed in the monetary field trigger: ".o_web_studio_sidebar .o_web_studio_property_currency_field input", run() { assertEqual(this.anchor.value, "X Studio Currency Test (x_studio_currency_test)"); }, }, { // currency field is in the view trigger: "div[data-field-name='x_studio_currency_test']", }, ], }); registry .category("web_tour.tours") .add("web_studio_monetary_create_monetary_with_existing_currency", { url: "/odoo?debug=1", steps: () => [ // Add a new monetary field, since a currency already exists, it should take it instead // of creating a new one { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", }, { trigger: ".o_app[data-menu-xmlid='web_studio.studio_app_menu']", run: "click", }, { // go to Add tab trigger: ".o_web_studio_new", run: "click", }, { // add a new monetary field trigger: ".o_web_studio_sidebar .o_web_studio_field_monetary", async run(helpers) { await helpers.drag_and_drop( `.o_web_studio_form_view_editor .o_inner_group .o_web_studio_hook:eq(1)`, { position: { bottom: 0, }, relative: true, } ); }, }, { // there is only one occurence of the currency field in the view trigger: ".o_form_renderer div[data-field-name^='x_studio_monetary']", run() { const o2mNumber = document.querySelectorAll("div.o_field_many2one"); assertEqual(o2mNumber.length, 1); }, }, ], }); registry.category("web_tour.tours").add("web_studio_add_field_into_empty_group_by", { url: "/odoo?debug=1", steps: () => [ { trigger: ".o_home_menu_background", }, { trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: ".o_web_studio_new_app", run: "click", }, { trigger: ".o_web_studio_app_creator_next", run: "click", }, { trigger: ".o_web_studio_app_creator_name > input", run: `edit ${randomString(6)}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_menu_creator > input", run: `edit ${randomString(6)}`, }, { trigger: ".o_web_studio_app_creator_next.is_ready", run: "click", }, { trigger: ".o_web_studio_model_configurator_next", run: "click", }, { trigger: ".o_web_studio_views_icons a:last", run: "click", }, { trigger: ` .o_web_studio_sidebar .o_web_studio_existing_fields .o_web_studio_component:has(.o_web_studio_component_description:contains(create_date))`, run: "drag_and_drop .o-web-studio-search--groupbys .o_web_studio_hook", }, ], }); registry.category("web_tour.tours").add("web_studio_test_create_action_in_form_view", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, ...addActionButtonSteps("web_studio_custom_action_name", "Test Action"), { trigger: ".o_web_studio_leave a", run: "click", }, ...stepNotInStudio(".o_form_view"), ], }); registry.category("web_tour.tours").add("web_studio_test_remove_action_in_form_view", { steps: () => [ { trigger: "a[data-menu-xmlid='web_studio.studio_test_partner_menu']", run: "click", }, { trigger: ".o_form_view .o_form_editable", run: "click", }, buttonToogleStudio, { trigger: 'button[studioxpath="/form[1]/header[1]/button[1]"]', run: "click", }, { trigger: "button.o_web_studio_remove", run: "click", }, { trigger: "footer.modal-footer>button.btn-primary", run: "click", }, { trigger: ".o_web_studio_leave a", run: "click", }, ], }); registry.category("web_tour.tours").add("web_studio_test_cohort_measure_values", { url: "/web?debug=1", steps: () => [ { trigger: ".o_home_menu_background", }, { // open studio trigger: ".o_main_navbar .o_web_studio_navbar_item", run: "click", }, { trigger: "body.o_in_studio", }, { // click on the created app trigger: ".o_app[data-menu-xmlid*='studio']:first", run: "click", }, { trigger: ".o_web_studio_menu .o_menu_sections button:contains('Views')", run: "click", }, { // open cohort view trigger: ".o_web_studio_view_category .o_web_studio_thumbnail_cohort.disabled", run: "click", }, { trigger: ".o_web_studio_property_measure .o_select_menu_toggler", run: "click", }, { trigger: ".dropdown-menu .dropdown-item:contains('color')", run: "click", }, ], });