Files
enterprise-addons/web_studio/static/tests/tours/web_studio_main_tours.js
T

2496 lines
78 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 <main> 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,
`<div class="oe_structure o-paragraph" o-diff-key="3"><br></div>`
);
},
},
{
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",
},
],
});