[FIX] *: adapt QUnit tests and tours
[FIX] *: selectors in tours [FIX][TMP] account: CogMenu selector in tours [FIX][TMP] web*: Breadcrumb targetting in tours Adds a `o_breadcrumb` class to target the whole breadcrumb, no matter how much elements it contains (collapsed parts, visible path, single name...). add classname on last breadcrumb item [FIX][TMP] project: View buttons selector in tours (moved away from CP) [FIX][TMP] project: Kanban selectors in tours (quick create) [FIX][TMP] *: SearchBar selectors in tours (toggle menu) [FIX][TMP] *: ButtonBox selector in tours [WIP][IMP] web: add toggleSearchBarMenu in search helpers adapt and unskip 3 list tests adapt and unskip calendar tests unskip web_tour test that actually pass post rebase fix allow to lose cell focus after multi edition (given to searchbar) - bug reported, to check later post rebase fixes fix Part-of: odoo/odoo#116641
This commit is contained in:
@@ -777,50 +777,8 @@ QUnit.module("Views", ({ beforeEach }) => {
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test(`breadcrumbs are updated with the displayed period`, async (assert) => {
|
||||
await makeView({
|
||||
type: "calendar",
|
||||
resModel: "event",
|
||||
serverData,
|
||||
arch: `
|
||||
<calendar date_start="start" date_stop="stop" all_day="allday" />
|
||||
`,
|
||||
});
|
||||
|
||||
// displays week mode by default
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb-item.active").textContent,
|
||||
"undefined (Dec 11 – 17, 2016)",
|
||||
"should display the current week"
|
||||
);
|
||||
|
||||
// switch to day mode
|
||||
await changeScale(target, "day");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb-item.active").textContent,
|
||||
"undefined (December 12, 2016)",
|
||||
"should display the current day"
|
||||
);
|
||||
|
||||
// switch to month mode
|
||||
await changeScale(target, "month");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb-item.active").textContent,
|
||||
"undefined (December 2016)",
|
||||
"should display the current month"
|
||||
);
|
||||
|
||||
// switch to year mode
|
||||
await changeScale(target, "year");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb-item.active").textContent,
|
||||
"undefined (2016)",
|
||||
"should display the current year"
|
||||
);
|
||||
});
|
||||
|
||||
QUnit.test(`create and change events`, async (assert) => {
|
||||
assert.expect(28);
|
||||
assert.expect(30);
|
||||
|
||||
await makeView({
|
||||
type: "calendar",
|
||||
@@ -999,9 +957,26 @@ QUnit.module("Views", ({ beforeEach }) => {
|
||||
assert.containsN(target, ".fc-event-container .fc-event", 10, "should display 10 events");
|
||||
// move to next month
|
||||
await navigate(target, "next");
|
||||
assert.containsN(
|
||||
target,
|
||||
".fc-event-container .fc-event",
|
||||
10,
|
||||
"should still display 10 events"
|
||||
);
|
||||
await pickDate(target, "2017-01-01");
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_calendar_sidebar tr:has(.ui-state-active) td",
|
||||
7,
|
||||
"week scale should highlight 7 days in mini calendar"
|
||||
);
|
||||
|
||||
await changeScale(target, "month");
|
||||
assert.containsNone(target, ".fc-event-container .fc-event", "should display 0 events");
|
||||
|
||||
await navigate(target, "prev");
|
||||
await pickDate(target, "2016-12-27");
|
||||
await changeScale(target, "month");
|
||||
await selectDateRange(target, "2016-12-20", "2016-12-21");
|
||||
await editInput(target, ".o-calendar-quick-create--input", "test");
|
||||
await click(target, ".o-calendar-quick-create--create-btn");
|
||||
@@ -3403,7 +3378,8 @@ QUnit.module("Views", ({ beforeEach }) => {
|
||||
// select filter for partner 1, 2 and 4
|
||||
await toggleSectionFilter(target, "partner_ids");
|
||||
await toggleFilter(target, "partner_id", 4);
|
||||
await navigate(target, "prev");
|
||||
await pickDate(target, "2016-12-05");
|
||||
await changeScale(target, "week");
|
||||
assert.containsN(target, ".o_calendar_filter_item", 6, "should display 6 filter items");
|
||||
assert.containsN(target, ".fc-event", 2, "should display 2 events");
|
||||
const events = target.querySelectorAll(".fc-event .o_event_title");
|
||||
@@ -3999,7 +3975,7 @@ QUnit.module("Views", ({ beforeEach }) => {
|
||||
});
|
||||
|
||||
QUnit.test(`initial_date given in the context`, async (assert) => {
|
||||
assert.expect(1);
|
||||
assert.expect(2);
|
||||
serverData.views = {
|
||||
"event,1,calendar": `<calendar date_start="start" date_stop="stop" mode="day"/>`,
|
||||
"event,false,search": `<search />`,
|
||||
@@ -4018,8 +3994,13 @@ QUnit.module("Views", ({ beforeEach }) => {
|
||||
await doAction(webClient, 1);
|
||||
await nextTick();
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb-item").textContent,
|
||||
"context initial date (January 30, 2016)",
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"context initial date",
|
||||
"should display name passed in the context"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_calendar_renderer .fc-day-header").textContent,
|
||||
"January 30, 2016",
|
||||
"should display day passed in the context"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -508,7 +508,7 @@ export async function changeScale(target, scale) {
|
||||
}
|
||||
|
||||
export async function navigate(target, direction) {
|
||||
await click(target, `.o_calendar_navigation_buttons .o_calendar_button_${direction}`);
|
||||
await click(target, `.o_calendar_mini .ui-datepicker-${direction}`);
|
||||
}
|
||||
|
||||
export function findFilterPanelSection(target, sectionName) {
|
||||
|
||||
@@ -376,7 +376,10 @@ QUnit.module("Fields", (hooks) => {
|
||||
resId: 1,
|
||||
});
|
||||
|
||||
await click(target, ".o_form_button_create");
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_form_button_create"
|
||||
);
|
||||
await click(target, ".o_field_many2one[name='product_id'] input");
|
||||
await click(
|
||||
target.querySelector(".o_field_many2one[name='product_id'] .dropdown-item")
|
||||
@@ -474,7 +477,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
});
|
||||
|
||||
QUnit.test('isUploading state should be set to false after upload', async function(assert) {
|
||||
QUnit.test("isUploading state should be set to false after upload", async function (assert) {
|
||||
assert.expect(1);
|
||||
serverData.models.partner.onchanges = {
|
||||
document: function (obj) {
|
||||
@@ -498,7 +501,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
await editInput(target, ".o_field_binary .o_input_file", file);
|
||||
assert.equal(
|
||||
target.querySelector(".o_select_file_button").innerText,
|
||||
"UPLOAD YOUR FILE",
|
||||
"Upload your file",
|
||||
"displayed value should be upload your file"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -224,7 +224,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
</tree>`,
|
||||
domain: [["id", "<", 0]],
|
||||
});
|
||||
await click(target.querySelector(".o_list_button_add"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_add"
|
||||
)
|
||||
);
|
||||
const date_column_width = target
|
||||
.querySelector('.o_list_table thead th[data-name="date_field"]')
|
||||
.style.width.replace("px", "");
|
||||
|
||||
@@ -268,7 +268,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
|
||||
await editInput(target, 'div[name="float_field"] input', "18.8958938598598");
|
||||
await click(target.querySelector(".o_list_button_save"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
)
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_widget").textContent,
|
||||
"18.896",
|
||||
|
||||
@@ -652,7 +652,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
|
||||
await clickSave(target);
|
||||
await click(target, ".o_form_button_create");
|
||||
await click(target, ".o_control_panel_main_buttons .d-none .o_form_button_create");
|
||||
assert.strictEqual(
|
||||
target.querySelector("img[data-alt='Binary file']").dataset.src,
|
||||
"/web/static/img/placeholder.png",
|
||||
|
||||
@@ -262,7 +262,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
"The value should be displayed properly in the input."
|
||||
);
|
||||
|
||||
await click(target.querySelector(".o_list_button_save"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
)
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector("td:not(.o_list_record_selector)").textContent,
|
||||
"-28",
|
||||
|
||||
@@ -181,7 +181,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
|
||||
// save and check the result
|
||||
await click(target.querySelector(".o_list_button_save"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
)
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelectorAll(".o_field_widget .badge:not(:empty)").length,
|
||||
3,
|
||||
|
||||
@@ -59,13 +59,13 @@ QUnit.module("Fields", (hooks) => {
|
||||
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_field_many2many_tags_avatar.o_field_widget .o_avatar",
|
||||
".o_field_many2many_tags_avatar.o_field_widget .o_avatar img",
|
||||
2,
|
||||
"should have 2 records"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_many2many_tags_avatar.o_field_widget .o_avatar img").dataset
|
||||
.src,
|
||||
target.querySelector(".o_field_many2many_tags_avatar.o_field_widget .o_avatar img")
|
||||
.dataset.src,
|
||||
"/web/image/partner/2/avatar_128",
|
||||
"should have correct avatar image"
|
||||
);
|
||||
@@ -116,13 +116,13 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_data_row:nth-child(2) .o_field_many2many_tags_avatar .o_avatar:not(.o_m2m_avatar_empty)",
|
||||
".o_data_row:nth-child(2) .o_field_many2many_tags_avatar .o_avatar:not(.o_m2m_avatar_empty) img",
|
||||
4,
|
||||
"should have 4 records"
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_data_row:nth-child(3) .o_field_many2many_tags_avatar .o_avatar:not(.o_m2m_avatar_empty)",
|
||||
".o_data_row:nth-child(3) .o_field_many2many_tags_avatar .o_avatar:not(.o_m2m_avatar_empty) img",
|
||||
5,
|
||||
"should have 5 records"
|
||||
);
|
||||
@@ -175,7 +175,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_data_row:nth-child(4) .o_field_many2many_tags_avatar .o_avatar:not(.o_m2m_avatar_empty)",
|
||||
".o_data_row:nth-child(4) .o_field_many2many_tags_avatar .o_avatar:not(.o_m2m_avatar_empty) img",
|
||||
4,
|
||||
"should have 4 records"
|
||||
);
|
||||
@@ -213,16 +213,20 @@ QUnit.module("Fields", (hooks) => {
|
||||
await click(target.querySelector(".o_data_row .o_many2many_tags_avatar_cell"));
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_data_row.o_selected_row .o_many2many_tags_avatar_cell .o_avatar",
|
||||
".o_data_row.o_selected_row .o_many2many_tags_avatar_cell .o_avatar img",
|
||||
1,
|
||||
"should have 1 many2many badges in edit mode"
|
||||
);
|
||||
|
||||
await selectDropdownItem(target, "partner_ids", "second record");
|
||||
await click(target.querySelector(".o_list_button_save"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
)
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_data_row:first-child .o_field_many2many_tags_avatar .o_avatar",
|
||||
".o_data_row:first-child .o_field_many2many_tags_avatar .o_avatar img",
|
||||
2,
|
||||
"should have 2 records"
|
||||
);
|
||||
@@ -333,13 +337,13 @@ QUnit.module("Fields", (hooks) => {
|
||||
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_kanban_record:nth-child(2) .o_field_many2many_tags_avatar .o_avatar",
|
||||
".o_kanban_record:nth-child(2) .o_field_many2many_tags_avatar .o_avatar img",
|
||||
2,
|
||||
"should have 2 records"
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_kanban_record:nth-child(3) .o_field_many2many_tags_avatar .o_avatar",
|
||||
".o_kanban_record:nth-child(3) .o_field_many2many_tags_avatar .o_avatar img",
|
||||
2,
|
||||
"should have 2 records"
|
||||
);
|
||||
@@ -374,7 +378,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_kanban_record:nth-child(4) .o_field_many2many_tags_avatar .o_avatar",
|
||||
".o_kanban_record:nth-child(4) .o_field_many2many_tags_avatar .o_avatar img",
|
||||
2,
|
||||
"should have 2 records"
|
||||
);
|
||||
|
||||
@@ -26,8 +26,7 @@ import {
|
||||
import {
|
||||
editSearch,
|
||||
getFacetTexts,
|
||||
toggleFilterMenu,
|
||||
toggleGroupByMenu,
|
||||
toggleSearchBarMenu,
|
||||
toggleMenuItem,
|
||||
validateSearch,
|
||||
} from "@web/../tests/search/helpers";
|
||||
@@ -626,7 +625,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
|
||||
const modal = target.querySelector(".modal");
|
||||
|
||||
await toggleFilterMenu(modal);
|
||||
await toggleSearchBarMenu(modal);
|
||||
await toggleMenuItem(modal, "Filter");
|
||||
|
||||
assert.strictEqual($("tr.o_data_row").length, 0, "should display 0 records");
|
||||
@@ -1767,7 +1766,10 @@ QUnit.module("Fields", (hooks) => {
|
||||
|
||||
assert.containsN(target, ".o_data_row", 3);
|
||||
|
||||
await click(target, ".o_list_button_add");
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_add"
|
||||
);
|
||||
|
||||
assert.containsN(target, ".o_data_row", 4);
|
||||
|
||||
@@ -3980,32 +3982,14 @@ QUnit.module("Fields", (hooks) => {
|
||||
await click(target, `.o_field_widget[name="trululu"] .o_m2o_dropdown_option_search_more`);
|
||||
|
||||
// dropdown selector
|
||||
const filterMenuCss = ".o_search_options > .o_filter_menu";
|
||||
const groupByMenuCss = ".o_search_options > .o_group_by_menu";
|
||||
const searchDropdown = ".o_control_panel_actions .o-dropdown";
|
||||
|
||||
await click(document.querySelector(`${filterMenuCss} > .dropdown-toggle`));
|
||||
await click(document.querySelector(`${searchDropdown} .dropdown-toggle`));
|
||||
|
||||
assert.hasClass(document.querySelector(filterMenuCss), "show");
|
||||
assert.hasClass(document.querySelector(searchDropdown), "show");
|
||||
assert.isVisible(
|
||||
document.querySelector(`${filterMenuCss} > .dropdown-menu`),
|
||||
"the filter dropdown menu should be visible"
|
||||
);
|
||||
assert.doesNotHaveClass(document.querySelector(groupByMenuCss), "show");
|
||||
assert.isNotVisible(
|
||||
document.querySelector(`${groupByMenuCss} > .dropdown-menu`),
|
||||
"the Group by dropdown menu should be not visible"
|
||||
);
|
||||
|
||||
await click(document.querySelector(`${groupByMenuCss} > .dropdown-toggle`));
|
||||
assert.hasClass(document.querySelector(groupByMenuCss), "show");
|
||||
assert.isVisible(
|
||||
document.querySelector(`${groupByMenuCss} > .dropdown-menu`),
|
||||
"the group by dropdown menu should be visible"
|
||||
);
|
||||
assert.doesNotHaveClass(document.querySelector(filterMenuCss), "show");
|
||||
assert.isNotVisible(
|
||||
document.querySelector(`${filterMenuCss} > .dropdown-menu`),
|
||||
"the filter dropdown menu should be not visible"
|
||||
document.querySelector(`${searchDropdown} > .dropdown-menu`),
|
||||
"the search bar dropdown menu should be visible"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -4198,7 +4182,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
|
||||
await selectDropdownItem(target, "trululu", "Search More...");
|
||||
const modal = target.querySelector(".modal");
|
||||
await toggleGroupByMenu(modal);
|
||||
await toggleSearchBarMenu(modal);
|
||||
await toggleMenuItem(modal, "Bar");
|
||||
|
||||
await click(modal.querySelectorAll(".o_group_header")[1]);
|
||||
@@ -4371,20 +4355,23 @@ QUnit.module("Fields", (hooks) => {
|
||||
const target = getFixture();
|
||||
await doAction(webClient, 1);
|
||||
assert.containsOnce(target, "a.o_form_uri", "should display 1 m2o link in form");
|
||||
assert.containsN(
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".breadcrumb-item",
|
||||
1,
|
||||
".o_breadcrumb",
|
||||
"Should only contain one breadcrumb at the start"
|
||||
);
|
||||
|
||||
await click(target.querySelector("a.o_form_uri"));
|
||||
assert.verifySteps(["get_formview_action"]);
|
||||
assert.containsN(
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".breadcrumb-item",
|
||||
2,
|
||||
"Should contain 2 breadcrumbs after the clicking on the link"
|
||||
"Should contain 1 breadcrumb link after the clicking on the link"
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_breadcrumb",
|
||||
"Should also contain the active breadcrumb item"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -4440,7 +4427,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
await click(target, ".o_field_widget .o_external_button");
|
||||
|
||||
assert.verifySteps(["get_formview_action"]);
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").textContent, "first recordNew");
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").textContent, "first record");
|
||||
});
|
||||
|
||||
QUnit.test("external_button opens a FormViewDialog in dialogs", async function (assert) {
|
||||
|
||||
@@ -771,7 +771,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
</tree>`,
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_list_button_add"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_add"
|
||||
)
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_selected_row .o_field_widget[name=float_field] input",
|
||||
|
||||
@@ -63,72 +63,15 @@ QUnit.module("Fields", (hooks) => {
|
||||
"should have a pie chart"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_pie_value")
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie_info .o_pie_value")
|
||||
.textContent,
|
||||
"10%",
|
||||
"should have 10% as pie value since int_field=10"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_mask").style
|
||||
.transform,
|
||||
"rotate(180deg)",
|
||||
"left mask should be covering the whole left side of the pie"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelectorAll(".o_field_percent_pie.o_field_widget .o_pie .o_mask")[1].style
|
||||
.transform,
|
||||
"rotate(36deg)",
|
||||
"right mask should be rotated from 360*(10/100) = 36 degrees"
|
||||
);
|
||||
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_field_percent_pie.o_field_widget .o_pie",
|
||||
"should have a pie chart"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_pie_value")
|
||||
.textContent,
|
||||
"10%",
|
||||
"should have 10% as pie value since int_field=10"
|
||||
);
|
||||
assert.ok(
|
||||
String(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_mask").style
|
||||
.transform
|
||||
).includes("rotate(180deg)"),
|
||||
"left mask should be covering the whole left side of the pie"
|
||||
);
|
||||
assert.ok(
|
||||
String(
|
||||
target.querySelectorAll(".o_field_percent_pie.o_field_widget .o_pie .o_mask")[1]
|
||||
.style.transform
|
||||
).includes("rotate(36deg)"),
|
||||
"right mask should be rotated from 360*(10/100) = 36 degrees"
|
||||
);
|
||||
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_field_percent_pie.o_field_widget .o_pie",
|
||||
"should have a pie chart"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_pie_value")
|
||||
.textContent,
|
||||
"10%",
|
||||
"should have 10% as pie value since int_field=10"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_mask").style
|
||||
.transform,
|
||||
"rotate(180deg)",
|
||||
"left mask should be covering the whole left side of the pie"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelectorAll(".o_field_percent_pie.o_field_widget .o_pie .o_mask")[1].style
|
||||
.transform,
|
||||
"rotate(36deg)",
|
||||
"right mask should be rotated from 360*(10/100) = 36 degrees"
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie").style.background,
|
||||
"conic-gradient( var(--PercentPieField-color-active) 0% 10%, var(--PercentPieField-color-static) 0% 100% )",
|
||||
"pie should have a background computed for its value of 10%"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -154,117 +97,15 @@ QUnit.module("Fields", (hooks) => {
|
||||
"should have a pie chart"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_pie_value")
|
||||
.textContent,
|
||||
"80%",
|
||||
"should have 80% as pie value since int_field=80"
|
||||
);
|
||||
assert.ok(
|
||||
String(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_mask").style
|
||||
.transform
|
||||
).includes("rotate(288deg)"),
|
||||
"left mask should be rotated from 360*(80/100) = 288 degrees"
|
||||
);
|
||||
assert.hasClass(
|
||||
target.querySelectorAll(".o_field_percent_pie.o_field_widget .o_pie .o_mask")[1],
|
||||
"o_full",
|
||||
"right mask should be hidden since the value > 50%"
|
||||
);
|
||||
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_field_percent_pie.o_field_widget .o_pie",
|
||||
"should have a pie chart"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_pie_value")
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie_info .o_pie_value")
|
||||
.textContent,
|
||||
"80%",
|
||||
"should have 80% as pie value since int_field=80"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_mask").style
|
||||
.transform,
|
||||
"rotate(288deg)",
|
||||
"left mask should be rotated from 360*(80/100) = 288 degrees"
|
||||
);
|
||||
assert.hasClass(
|
||||
target.querySelectorAll(".o_field_percent_pie.o_field_widget .o_pie .o_mask")[1],
|
||||
"o_full",
|
||||
"right mask should be hidden since the value > 50%"
|
||||
);
|
||||
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_field_percent_pie.o_field_widget .o_pie",
|
||||
"should have a pie chart"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_pie_value")
|
||||
.textContent,
|
||||
"80%",
|
||||
"should have 80% as pie value since int_field=80"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie .o_mask").style
|
||||
.transform,
|
||||
"rotate(288deg)",
|
||||
"left mask should be rotated from 360*(80/100) = 288 degrees"
|
||||
);
|
||||
assert.hasClass(
|
||||
target.querySelectorAll(".o_field_percent_pie.o_field_widget .o_pie .o_mask")[1],
|
||||
"o_full",
|
||||
"right mask should be hidden since the value > 50%"
|
||||
target.querySelector(".o_field_percent_pie.o_field_widget .o_pie").style.background,
|
||||
"conic-gradient( var(--PercentPieField-color-active) 0% 80%, var(--PercentPieField-color-static) 0% 100% )",
|
||||
"pie should have a background computed for its value of 80%"
|
||||
);
|
||||
});
|
||||
|
||||
// TODO: This test would pass without any issue since all the classes and
|
||||
// custom style attributes are correctly set on the widget in list
|
||||
// view, but since the scss itself for this widget currently only
|
||||
// applies inside the form view, the widget is unusable. This test can
|
||||
// be uncommented when we refactor the scss files so that this widget
|
||||
// stylesheet applies in both form and list view.
|
||||
// QUnit.test('percentpie widget in editable list view', async function(assert) {
|
||||
// assert.expect(10);
|
||||
//
|
||||
// var list = await createView({
|
||||
// View: ListView,
|
||||
// model: 'partner',
|
||||
// data: this.data,
|
||||
// arch: '<tree editable="bottom">' +
|
||||
// '<field name="foo"/>' +
|
||||
// '<field name="int_field" widget="percentpie"/>' +
|
||||
// '</tree>',
|
||||
// });
|
||||
//
|
||||
// assert.containsN(list, '.o_field_percent_pie .o_pie', 5,
|
||||
// "should have five pie charts");
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_pie_value').textContent,
|
||||
// '10%', "should have 10% as pie value since int_field=10");
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_mask').attr('style'),
|
||||
// 'rotate(180deg)', "left mask should be covering the whole left side of the pie");
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_mask').last().attr('style'),
|
||||
// 'rotate(36deg)', "right mask should be rotated from 360*(10/100) = 36 degrees");
|
||||
//
|
||||
// // switch to edit mode and check the result
|
||||
// testUtils.dom.click( target.querySelector('tbody td:not(.o_list_record_selector)'));
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_pie_value').textContent,
|
||||
// '10%', "should have 10% as pie value since int_field=10");
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_mask').attr('style'),
|
||||
// 'rotate(180deg)', "left mask should be covering the whole right side of the pie");
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_mask').last().attr('style'),
|
||||
// 'rotate(36deg)', "right mask should be rotated from 360*(10/100) = 36 degrees");
|
||||
//
|
||||
// // save
|
||||
// testUtils.dom.click( list.$buttons.find('.o_list_button_save'));
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_pie_value').textContent,
|
||||
// '10%', "should have 10% as pie value since int_field=10");
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_mask').attr('style'),
|
||||
// 'rotate(180deg)', "left mask should be covering the whole right side of the pie");
|
||||
// assert.strictEqual(target.querySelector('.o_field_percent_pie:first .o_pie .o_mask').last().attr('style'),
|
||||
// 'rotate(36deg)', "right mask should be rotated from 360*(10/100) = 36 degrees");
|
||||
//
|
||||
// list.destroy();
|
||||
// });
|
||||
});
|
||||
|
||||
@@ -140,7 +140,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
await editInput(cell, "input", "new");
|
||||
|
||||
// save
|
||||
await click(target.querySelector(".o_list_button_save"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
)
|
||||
);
|
||||
cell = target.querySelector("tbody td:not(.o_list_record_selector)");
|
||||
assert.doesNotHaveClass(
|
||||
cell.parentElement,
|
||||
|
||||
@@ -343,7 +343,10 @@ QUnit.module("Fields", (hooks) => {
|
||||
assert.verifySteps(['write [[1],{"selection":"1"}]']);
|
||||
assert.containsOnce(target, ".o_kanban_record .fa-star");
|
||||
|
||||
await click(target, ".o-kanban-button-new");
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o-kanban-button-new"
|
||||
);
|
||||
await click(target, ".o_kanban_quick_create .o_kanban_add");
|
||||
await click(target.querySelector(".o_priority a.o_priority_star.fa-star-o"), null, true);
|
||||
assert.verifySteps(['write [[6],{"selection":"1"}]']);
|
||||
@@ -404,7 +407,10 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
|
||||
// save
|
||||
await click(target, ".o_list_button_save");
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
);
|
||||
|
||||
assert.containsN(
|
||||
target.querySelectorAll(".o_data_row")[0],
|
||||
@@ -514,7 +520,10 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
|
||||
// save
|
||||
await click(target, ".o_list_button_save");
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
);
|
||||
rows = target.querySelectorAll(".o_data_row");
|
||||
|
||||
assert.containsN(
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {
|
||||
makeFakeLocalizationService,
|
||||
makeFakeNotificationService,
|
||||
} from "@web/../tests/helpers/mock_services";
|
||||
import { makeFakeLocalizationService } from "@web/../tests/helpers/mock_services";
|
||||
import {
|
||||
click,
|
||||
clickSave,
|
||||
@@ -507,13 +504,6 @@ QUnit.module("Fields", (hooks) => {
|
||||
"ProgressBarField: write gibbrish instead of int throws warning",
|
||||
async function (assert) {
|
||||
serverData.models.partner.records[0].int_field = 99;
|
||||
const mock = () => {
|
||||
assert.step("Show error message");
|
||||
return () => {};
|
||||
};
|
||||
registry.category("services").add("notification", makeFakeNotificationService(mock), {
|
||||
force: true,
|
||||
});
|
||||
|
||||
await makeView({
|
||||
serverData,
|
||||
@@ -535,7 +525,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
await editInput(target, ".o_progressbar_value .o_input", "trente sept virgule neuf");
|
||||
await clickSave(target);
|
||||
assert.containsOnce(target, ".o_form_dirty", "The form has not been saved");
|
||||
assert.verifySteps(["Show error message"], "The error message was shown correctly");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_form_button_save").disabled,
|
||||
true,
|
||||
"save button is disabled"
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -555,7 +549,8 @@ QUnit.module("Fields", (hooks) => {
|
||||
});
|
||||
|
||||
assert.containsOnce(
|
||||
target, ".o_progressbar .bg-warning",
|
||||
target,
|
||||
".o_progressbar .bg-warning",
|
||||
"As the value has excedded the max value, the color should be set to bg-warning"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -865,7 +865,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
mockRPC: (route, { method, args }) => {
|
||||
if (method === "onchange") {
|
||||
return {
|
||||
value: {reference: "partner,2"},
|
||||
value: { reference: "partner,2" },
|
||||
};
|
||||
} else if (method === "create") {
|
||||
assert.strictEqual(args.length, 1);
|
||||
@@ -874,10 +874,16 @@ QUnit.module("Fields", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
await click(target, '.o_list_button_add');
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_add"
|
||||
);
|
||||
await click(target, '.o_list_char[name="display_name"] input');
|
||||
await editInput(target, '.o_list_char[name="display_name"] input', "Blabla");
|
||||
await click(target, '.o_list_button_save');
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
);
|
||||
});
|
||||
|
||||
QUnit.test(
|
||||
|
||||
@@ -82,14 +82,18 @@ QUnit.module("Fields", (hooks) => {
|
||||
".o_field_widget.o_field_state_selection span.o_status.o_status_green",
|
||||
"should not have one green status since selection is the second, blocked state"
|
||||
);
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu", "there should not be a dropdown");
|
||||
|
||||
// Click on the status button to make the dropdown appear
|
||||
await click(target, ".o_field_widget.o_field_state_selection .o_status");
|
||||
assert.containsOnce(document.body, ".dropdown-menu", "there should be a dropdown");
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
".o_content .dropdown-menu",
|
||||
"there should be a dropdown"
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".dropdown-menu .dropdown-item",
|
||||
".o_content .dropdown-menu .dropdown-item",
|
||||
3,
|
||||
"there should be three options in the dropdown"
|
||||
);
|
||||
@@ -100,8 +104,12 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
|
||||
// Click on the first option, "Normal"
|
||||
await click(target.querySelector(".dropdown-menu .dropdown-item"));
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown anymore");
|
||||
await click(target.querySelector(".o_content .dropdown-menu .dropdown-item"));
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_content .dropdown-menu",
|
||||
"there should not be a dropdown anymore"
|
||||
);
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_field_widget.o_field_state_selection span.o_status.o_status_red",
|
||||
@@ -118,7 +126,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
"should have one grey status since selection is the first, normal state"
|
||||
);
|
||||
|
||||
assert.containsNone(target, ".dropdown-menu", "there should still not be a dropdown");
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_content .dropdown-menu",
|
||||
"there should still not be a dropdown"
|
||||
);
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_field_widget.o_field_state_selection span.o_status.o_status_red",
|
||||
@@ -137,7 +149,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
|
||||
// Click on the status button to make the dropdown appear
|
||||
await click(target, ".o_field_widget.o_field_state_selection .o_status");
|
||||
assert.containsOnce(target, ".dropdown-menu", "there should be a dropdown");
|
||||
assert.containsOnce(target, ".o_content .dropdown-menu", "there should be a dropdown");
|
||||
assert.containsN(
|
||||
target,
|
||||
".dropdown-menu .dropdown-item",
|
||||
@@ -146,8 +158,12 @@ QUnit.module("Fields", (hooks) => {
|
||||
);
|
||||
|
||||
// Click on the last option, "Done"
|
||||
await click(target, ".dropdown-menu .dropdown-item:last-child");
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown anymore");
|
||||
await click(target, ".o_content .dropdown-menu .dropdown-item:last-child");
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_content .dropdown-menu",
|
||||
"there should not be a dropdown anymore"
|
||||
);
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_field_widget.o_field_state_selection span.o_status.o_status_red",
|
||||
@@ -163,7 +179,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
await click(target.querySelector(".o_form_button_save"));
|
||||
assert.containsNone(
|
||||
target,
|
||||
".dropdown-menu",
|
||||
".o_content .dropdown-menu",
|
||||
"there should still not be a dropdown anymore"
|
||||
);
|
||||
assert.containsNone(
|
||||
@@ -281,7 +297,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
".o_state_selection_cell .o_field_state_selection span.o_status.o_status_green",
|
||||
"should have one green status"
|
||||
);
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu", "there should not be a dropdown");
|
||||
|
||||
// Click on the status button to make the dropdown appear
|
||||
let cell = target.querySelector("tbody td.o_state_selection_cell");
|
||||
@@ -293,16 +309,16 @@ QUnit.module("Fields", (hooks) => {
|
||||
"o_selected_row",
|
||||
"should not be in edit mode since we clicked on the state selection widget"
|
||||
);
|
||||
assert.containsOnce(target, ".dropdown-menu", "there should be a dropdown");
|
||||
assert.containsOnce(target, ".o_content .dropdown-menu", "there should be a dropdown");
|
||||
assert.containsN(
|
||||
target,
|
||||
".dropdown-menu .dropdown-item",
|
||||
".o_content .dropdown-menu .dropdown-item",
|
||||
3,
|
||||
"there should be three options in the dropdown"
|
||||
);
|
||||
|
||||
// Click on the first option, "Normal"
|
||||
await click(target.querySelector(".dropdown-menu .dropdown-item"));
|
||||
await click(target.querySelector(".o_content .dropdown-menu .dropdown-item"));
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_state_selection_cell .o_field_state_selection span.o_status",
|
||||
@@ -319,7 +335,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
".o_state_selection_cell .o_field_state_selection span.o_status.o_status_green",
|
||||
"should still have one green status"
|
||||
);
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu", "there should not be a dropdown");
|
||||
assert.containsNone(target, "tr.o_selected_row", "should not be in edit mode");
|
||||
|
||||
// switch to edit mode and check the result
|
||||
@@ -342,16 +358,16 @@ QUnit.module("Fields", (hooks) => {
|
||||
".o_state_selection_cell .o_field_state_selection span.o_status.o_status_green",
|
||||
"should still have one green status"
|
||||
);
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu", "there should not be a dropdown");
|
||||
|
||||
// Click on the status button to make the dropdown appear
|
||||
await click(
|
||||
target.querySelector(".o_state_selection_cell .o_field_state_selection span.o_status")
|
||||
);
|
||||
assert.containsOnce(target, ".dropdown-menu", "there should be a dropdown");
|
||||
assert.containsOnce(target, ".o_content .dropdown-menu", "there should be a dropdown");
|
||||
assert.containsN(
|
||||
target,
|
||||
".dropdown-menu .dropdown-item",
|
||||
".o_content .dropdown-menu .dropdown-item",
|
||||
3,
|
||||
"there should be three options in the dropdown"
|
||||
);
|
||||
@@ -359,7 +375,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
// Click on another row
|
||||
const lastCell = target.querySelectorAll("tbody td.o_state_selection_cell")[4];
|
||||
await click(lastCell);
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown anymore");
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_content .dropdown-menu",
|
||||
"there should not be a dropdown anymore"
|
||||
);
|
||||
const firstCell = target.querySelector("tbody td.o_state_selection_cell");
|
||||
assert.doesNotHaveClass(
|
||||
firstCell.parentElement,
|
||||
@@ -378,17 +398,21 @@ QUnit.module("Fields", (hooks) => {
|
||||
".o_state_selection_cell .o_field_state_selection span.o_status"
|
||||
)[3]
|
||||
);
|
||||
assert.containsOnce(target, ".dropdown-menu", "there should be a dropdown");
|
||||
assert.containsOnce(target, ".o_content .dropdown-menu", "there should be a dropdown");
|
||||
assert.containsN(
|
||||
target,
|
||||
".dropdown-menu .dropdown-item",
|
||||
".o_content .dropdown-menu .dropdown-item",
|
||||
3,
|
||||
"there should be three options in the dropdown"
|
||||
);
|
||||
|
||||
// Click on the last option, "Done"
|
||||
await click(target, ".dropdown-menu .dropdown-item:last-child");
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown anymore");
|
||||
await click(target, ".o_content .dropdown-menu .dropdown-item:last-child");
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_content .dropdown-menu",
|
||||
"there should not be a dropdown anymore"
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_state_selection_cell .o_field_state_selection span.o_status",
|
||||
@@ -406,10 +430,14 @@ QUnit.module("Fields", (hooks) => {
|
||||
2,
|
||||
"should now have two green status"
|
||||
);
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu", "there should not be a dropdown");
|
||||
|
||||
// save
|
||||
await click(target.querySelector(".o_list_button_save"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
)
|
||||
);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_state_selection_cell .o_field_state_selection span.o_status",
|
||||
@@ -427,7 +455,7 @@ QUnit.module("Fields", (hooks) => {
|
||||
2,
|
||||
"should have two green status"
|
||||
);
|
||||
assert.containsNone(target, ".dropdown-menu", "there should not be a dropdown");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu", "there should not be a dropdown");
|
||||
});
|
||||
|
||||
QUnit.test(
|
||||
|
||||
@@ -584,7 +584,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
arch: '<tree editable="top"><field name="foo"/></tree>',
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_list_button_add"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_add"
|
||||
)
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector("textarea"),
|
||||
|
||||
@@ -226,7 +226,11 @@ QUnit.module("Fields", (hooks) => {
|
||||
await editInput(cell, "input", "brolo");
|
||||
|
||||
// save
|
||||
await click(target.querySelector(".o_list_button_save"));
|
||||
await click(
|
||||
target.querySelector(
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_list_button_save"
|
||||
)
|
||||
);
|
||||
cell = target.querySelector("tbody td:not(.o_list_record_selector)");
|
||||
assert.doesNotHaveClass(
|
||||
cell.parentElement,
|
||||
|
||||
@@ -184,7 +184,7 @@ QUnit.module("Form Compiler", (hooks) => {
|
||||
const expected = /*xml*/ `
|
||||
<t>
|
||||
<div class="o_form_renderer o_form_nosheet" t-att-class="__comp__.props.class" t-attf-class="{{__comp__.props.record.isInEdition ? 'o_form_editable' : 'o_form_readonly'}} d-block {{ __comp__.props.record.isDirty ? 'o_form_dirty' : !__comp__.props.record.isNew ? 'o_form_saved' : '' }}" t-ref="compiled_view_root">
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between pb-3 px-3"><StatusBarButtons/></div>
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between mb-2 px-3 pb-2 pb-md-0 px-md-0"><StatusBarButtons/></div>
|
||||
<div>someDiv</div>
|
||||
</div>
|
||||
</t>`;
|
||||
@@ -206,10 +206,10 @@ QUnit.module("Form Compiler", (hooks) => {
|
||||
const expected = /*xml*/ `
|
||||
<t>
|
||||
<div class="o_form_renderer" t-att-class="__comp__.props.class" t-attf-class="{{__comp__.props.record.isInEdition ? 'o_form_editable' : 'o_form_readonly'}} d-flex {{ __comp__.uiService.size < 6 ? "flex-column" : "flex-nowrap h-100" }} {{ __comp__.props.record.isDirty ? 'o_form_dirty' : !__comp__.props.record.isNew ? 'o_form_saved' : '' }}" t-ref="compiled_view_root">
|
||||
<div class="o_form_sheet_bg pt-2">
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between pb-3 px-3"><StatusBarButtons/></div>
|
||||
<div class="o_form_sheet_bg">
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between mb-2 px-3 pb-2 pb-md-0 px-md-0"><StatusBarButtons/></div>
|
||||
<div>someDiv</div>
|
||||
<div class="o_form_sheet position-relative clearfix px-3">
|
||||
<div class="o_form_sheet position-relative">
|
||||
<div>inside sheet</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -267,7 +267,7 @@ QUnit.module("Form Compiler", (hooks) => {
|
||||
</form>`;
|
||||
|
||||
const expected = /*xml*/ `
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between pb-3 px-3">
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between mb-2 px-3 pb-2 pb-md-0 px-md-0">
|
||||
<StatusBarButtons>
|
||||
<t t-set-slot="button_0" isVisible="true">
|
||||
<div>someDiv</div>
|
||||
@@ -285,7 +285,7 @@ QUnit.module("Form Compiler", (hooks) => {
|
||||
</form>`;
|
||||
|
||||
const expected = /*xml*/ `
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between pb-3 px-3">
|
||||
<div class="o_form_statusbar position-relative d-flex justify-content-between mb-2 px-3 pb-2 pb-md-0 px-md-0">
|
||||
<StatusBarButtons/>
|
||||
</div>`;
|
||||
|
||||
|
||||
@@ -21,7 +21,11 @@ import {
|
||||
triggerEvent,
|
||||
triggerHotkey,
|
||||
} from "@web/../tests/helpers/utils";
|
||||
import { toggleActionMenu, toggleGroupByMenu, toggleMenuItem } from "@web/../tests/search/helpers";
|
||||
import {
|
||||
toggleActionMenu,
|
||||
toggleSearchBarMenu,
|
||||
toggleMenuItem,
|
||||
} from "@web/../tests/search/helpers";
|
||||
import { makeView, makeViewInDialog, setupViewRegistries } from "@web/../tests/views/helpers";
|
||||
import { createWebClient, doAction } from "@web/../tests/webclient/helpers";
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
@@ -46,6 +50,11 @@ const widgetRegistry = registry.category("view_widgets");
|
||||
let target;
|
||||
let serverData;
|
||||
|
||||
// Record
|
||||
async function createRecord() {
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o_form_button_create");
|
||||
}
|
||||
|
||||
QUnit.module("Views", (hooks) => {
|
||||
hooks.beforeEach(() => {
|
||||
target = getFixture();
|
||||
@@ -384,15 +393,15 @@ QUnit.module("Views", (hooks) => {
|
||||
type: "form",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: `<form><sheet><div name="button_box"><button id="btn1">MyButton</button><button id="btn2">MyButton2</button><button id="btn3">MyButton3</button></div></sheet></form>`,
|
||||
arch: `<form><sheet><div name="button_box"><button id="btn1">MyButton</button><button id="btn2">MyButton2</button><button id="btn3">MyButton3</button><button id="btn4">MyButton4</button></div></sheet></form>`,
|
||||
resId: 2,
|
||||
});
|
||||
|
||||
assert.containsN(target, ".o-form-buttonbox > button", 2);
|
||||
assert.containsN(target, ".o-form-buttonbox > button", 3);
|
||||
assert.containsOnce(target, ".o-dropdown.oe_stat_button .o_button_more");
|
||||
await click(target, ".o-dropdown.oe_stat_button .o_button_more");
|
||||
|
||||
assert.containsOnce(target, ".o-dropdown--menu #btn3");
|
||||
await click(target, ".o-dropdown.oe_stat_button .o_button_more");
|
||||
assert.containsOnce(target, ".o-dropdown--menu #btn4");
|
||||
});
|
||||
|
||||
QUnit.test("button box rendering on big screen", async (assert) => {
|
||||
@@ -1708,7 +1717,7 @@ QUnit.module("Views", (hooks) => {
|
||||
const webClient = await createWebClient({ serverData });
|
||||
await doAction(webClient, 1);
|
||||
|
||||
await click(target.querySelector(".o_list_button_add"));
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o_list_button_add");
|
||||
assert.containsOnce(target, ".o_form_view");
|
||||
// sanity check: notebook active page is first page
|
||||
assert.hasClass(target.querySelector(".o_notebook .nav-link"), "active");
|
||||
@@ -1720,7 +1729,7 @@ QUnit.module("Views", (hooks) => {
|
||||
await click(target.querySelector(".o_control_panel .o_form_button_cancel"));
|
||||
assert.containsNone(target, ".o_form_view");
|
||||
|
||||
await click(target.querySelector(".o_list_button_add"));
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o_list_button_add");
|
||||
assert.containsOnce(target, ".o_form_view");
|
||||
// check notebook active page is first page again
|
||||
assert.hasClass(target.querySelector(".o_notebook .nav-link"), "active");
|
||||
@@ -3187,16 +3196,10 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.verifySteps(["read1", "willStart"]);
|
||||
|
||||
await click(target.querySelector(".o_form_statusbar button.p"));
|
||||
assert.verifySteps(["willUpdateProps", "read2", "willUpdateProps", "willUpdateProps"]);
|
||||
assert.verifySteps(["willUpdateProps", "read2", "willUpdateProps"]);
|
||||
|
||||
await click(target.querySelector(".o_form_statusbar button.p"));
|
||||
assert.verifySteps([
|
||||
"willUpdateProps",
|
||||
"willUpdateProps",
|
||||
"read3",
|
||||
"willUpdateProps",
|
||||
"willUpdateProps",
|
||||
]);
|
||||
assert.verifySteps(["willUpdateProps", "read3", "willUpdateProps"]);
|
||||
});
|
||||
|
||||
QUnit.test("buttons in form view, new record", async function (assert) {
|
||||
@@ -3636,7 +3639,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
const n = serverData.models.partner.records.length;
|
||||
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
assert.containsOnce(target, ".o_form_editable");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_char input").value,
|
||||
@@ -3784,7 +3787,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.containsOnce(target, ".o_cp_action_menus");
|
||||
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
|
||||
assert.containsOnce(target, ".o_cp_action_menus");
|
||||
|
||||
@@ -3897,13 +3900,13 @@ QUnit.module("Views", (hooks) => {
|
||||
await doAction(webClient, 1);
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb").textContent,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"first record",
|
||||
"should have the display name of the record as title"
|
||||
"should have the display name of the record as title"
|
||||
);
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb").textContent,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"New",
|
||||
"should have the display name of the record as title"
|
||||
);
|
||||
@@ -4186,16 +4189,16 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb").textContent,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"first record",
|
||||
"should have the display name of the record as title"
|
||||
"should have the display name of the record as title"
|
||||
);
|
||||
|
||||
await toggleActionMenu(target);
|
||||
await toggleMenuItem(target, "Duplicate");
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb").textContent,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"first record (copy)",
|
||||
"should have duplicated the record"
|
||||
);
|
||||
@@ -4236,9 +4239,9 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb").textContent,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"first record",
|
||||
"should have the display name of the record as title"
|
||||
"should have the display name of the record as title"
|
||||
);
|
||||
assert.containsOnce(target, ".o_cp_action_menus");
|
||||
await toggleActionMenu(target);
|
||||
@@ -4342,15 +4345,14 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb").textContent,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"second record",
|
||||
"should have correct display_name"
|
||||
);
|
||||
await editInput(target, ".o_field_widget[name=name] input", "some other name");
|
||||
|
||||
await click(target.querySelector(".oe_stat_button"));
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb").textContent,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb").textContent,
|
||||
"GOLDORAK",
|
||||
"should have correct display_name"
|
||||
);
|
||||
@@ -5041,20 +5043,17 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").innerText, "first record");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").innerText, "first record");
|
||||
assert.hasClass(target.querySelector(".o_field_widget[name=foo]"), "o_required_modifier");
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "1");
|
||||
assert.strictEqual(target.querySelector(".o_pager_limit").textContent, "2");
|
||||
|
||||
await editInput(target, ".o_field_widget[name=foo] input", "");
|
||||
await click(target.querySelector(".o_pager_next"));
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").innerText, "first record");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".breadcrumb-item > span").innerText,
|
||||
"first record"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".breadcrumb-item > .o_form_status_indicator").innerText.trim(),
|
||||
"Unable to save"
|
||||
target.querySelector(".o_form_status_indicator .text-danger").dataset.tooltip,
|
||||
"Unable to save. Correct the issue or discard changes"
|
||||
);
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "1");
|
||||
assert.strictEqual(target.querySelector(".o_pager_limit").textContent, "2");
|
||||
@@ -5077,7 +5076,7 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").innerText, "first record");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").innerText, "first record");
|
||||
assert.hasClass(target.querySelector(".o_field_widget[name=foo]"), "o_required_modifier");
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "1");
|
||||
assert.strictEqual(target.querySelector(".o_pager_limit").textContent, "2");
|
||||
@@ -5085,13 +5084,10 @@ QUnit.module("Views", (hooks) => {
|
||||
await editInput(target, ".o_field_widget[name=foo] input", "");
|
||||
triggerHotkey("alt+n");
|
||||
await nextTick();
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").innerText, "first record");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".breadcrumb-item > span").innerText,
|
||||
"first record"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".breadcrumb-item > .o_form_status_indicator").innerText.trim(),
|
||||
"Unable to save"
|
||||
target.querySelector(".o_form_status_indicator .text-danger").dataset.tooltip,
|
||||
"Unable to save. Correct the issue or discard changes"
|
||||
);
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "1");
|
||||
assert.strictEqual(target.querySelector(".o_pager_limit").textContent, "2");
|
||||
@@ -5116,17 +5112,17 @@ QUnit.module("Views", (hooks) => {
|
||||
resId: 1,
|
||||
});
|
||||
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").innerText, "first record");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").innerText, "first record");
|
||||
assert.hasClass(target.querySelector(".o_field_widget[name=foo]"), "o_required_modifier");
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "1");
|
||||
assert.strictEqual(target.querySelector(".o_pager_limit").textContent, "2");
|
||||
|
||||
await click(target.querySelector(".o_pager_next"));
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").innerText, "second record");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").innerText, "second record");
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "2");
|
||||
|
||||
await click(target.querySelector(".o_pager_previous"));
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").innerText, "first record");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").innerText, "first record");
|
||||
assert.hasClass(target.querySelector(".o_field_widget[name=foo]"), "o_required_modifier");
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "1");
|
||||
});
|
||||
@@ -5480,7 +5476,7 @@ QUnit.module("Views", (hooks) => {
|
||||
await click(target, ".o_back_button");
|
||||
|
||||
// Create a new record
|
||||
await click(target, ".o_list_button_add");
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o_list_button_add");
|
||||
notebooks = target.querySelectorAll(".o_notebook");
|
||||
assert.hasClass(notebooks[0].querySelector(".nav-link"), "active");
|
||||
assert.doesNotHaveClass(notebooks[0].querySelectorAll(".nav-link")[1], "active");
|
||||
@@ -5505,7 +5501,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.strictEqual(target.querySelector(".o_pager_value").textContent, "1");
|
||||
assert.strictEqual(target.querySelector(".o_pager_limit").textContent, "2");
|
||||
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
|
||||
assert.containsNone(target, ".o_pager");
|
||||
|
||||
@@ -5557,7 +5553,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.containsNone(target, ".foo_field");
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
assert.containsOnce(target, ".foo_field");
|
||||
});
|
||||
|
||||
@@ -5582,7 +5578,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_field_empty");
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
assert.containsNone(target, ".o_field_empty");
|
||||
});
|
||||
|
||||
@@ -5883,7 +5879,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// create mode (leave edition first!)
|
||||
await clickDiscard(target);
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_stat_button",
|
||||
@@ -7026,7 +7022,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
});
|
||||
|
||||
QUnit.test("diplay something else than a button in a buttonbox", async function (assert) {
|
||||
QUnit.test("display something else than a button in a buttonbox", async function (assert) {
|
||||
await makeView({
|
||||
type: "form",
|
||||
resModel: "partner",
|
||||
@@ -7044,18 +7040,18 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".oe_button_box").children.length,
|
||||
target.querySelector(".o-form-buttonbox").children.length,
|
||||
2,
|
||||
"button box should contain two children"
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box > .oe_stat_button",
|
||||
".o-form-buttonbox > .oe_stat_button",
|
||||
"button box should only contain one button"
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box > label",
|
||||
".o-form-buttonbox > label",
|
||||
"button box should only contain one label"
|
||||
);
|
||||
});
|
||||
@@ -7085,12 +7081,12 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".oe_button_box").children.length,
|
||||
target.querySelector(".o-form-buttonbox").children.length,
|
||||
1,
|
||||
"button box should contain only one child"
|
||||
);
|
||||
assert.hasClass(
|
||||
target.querySelector(".oe_button_box"),
|
||||
target.querySelector(".o-form-buttonbox"),
|
||||
"o_not_full",
|
||||
"the buttonbox should not be full"
|
||||
);
|
||||
@@ -7135,7 +7131,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.strictEqual(
|
||||
target.querySelector(".oe_button_box").children.length,
|
||||
target.querySelector(".o-form-buttonbox").children.length,
|
||||
2,
|
||||
"button box should contain two children"
|
||||
);
|
||||
@@ -7557,7 +7553,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
function getVisibleButtonTexts() {
|
||||
return [...target.querySelectorAll(".modal-footer button:not(.d-none)")].map((x) =>
|
||||
x.innerHTML.trim()
|
||||
x.textContent.trim()
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -7624,7 +7620,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
await clickDiscard(target);
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_widget[name=foo] input").value,
|
||||
"",
|
||||
@@ -7647,11 +7643,9 @@ QUnit.module("Views", (hooks) => {
|
||||
</sheet>
|
||||
</form>`,
|
||||
});
|
||||
var $button = target.querySelector(
|
||||
".o_form_view .o_form_sheet .oe_button_box .oe_stat_button"
|
||||
);
|
||||
const button = target.querySelector(".o_form_view .o-form-buttonbox .oe_stat_button");
|
||||
assert.strictEqual(
|
||||
$button.textContent,
|
||||
button.textContent,
|
||||
"Inventory Moves",
|
||||
"the stat button should contain a span with the string attribute value"
|
||||
);
|
||||
@@ -7916,7 +7910,6 @@ QUnit.module("Views", (hooks) => {
|
||||
<field name="bar"/>
|
||||
</button>`);
|
||||
|
||||
// legacySelector = ".oe_stat_button:not(.dropdown-item, .dropdown-toggle)";
|
||||
const statButtonSelector = ".o-form-buttonbox .oe_stat_button:not(.o-dropdown)";
|
||||
|
||||
const formView = await makeView({
|
||||
@@ -7944,12 +7937,12 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
};
|
||||
|
||||
await assertFormContainsNButtonsWithSizeClass(0, 2);
|
||||
await assertFormContainsNButtonsWithSizeClass(1, 2);
|
||||
await assertFormContainsNButtonsWithSizeClass(2, 2);
|
||||
await assertFormContainsNButtonsWithSizeClass(3, 4);
|
||||
await assertFormContainsNButtonsWithSizeClass(4, 7);
|
||||
await assertFormContainsNButtonsWithSizeClass(5, 7);
|
||||
await assertFormContainsNButtonsWithSizeClass(0, 3);
|
||||
await assertFormContainsNButtonsWithSizeClass(1, 3);
|
||||
await assertFormContainsNButtonsWithSizeClass(2, 3);
|
||||
await assertFormContainsNButtonsWithSizeClass(3, 7);
|
||||
await assertFormContainsNButtonsWithSizeClass(4, 3);
|
||||
await assertFormContainsNButtonsWithSizeClass(5, 4);
|
||||
await assertFormContainsNButtonsWithSizeClass(6, 7);
|
||||
});
|
||||
|
||||
@@ -8100,10 +8093,9 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
assert.containsNone(target, ".o_cp_action_menus .dropdown-toggle:contains(Print)");
|
||||
assert.containsOnce(target, ".o_cp_action_menus .dropdown-toggle:contains(Action)");
|
||||
|
||||
await toggleActionMenu(target);
|
||||
assert.containsNone(target, ".o_cp_action_menus .dropdown-menu_group:contains(Print)");
|
||||
assert.containsOnce(target, ".o_cp_action_menus .dropdown-menu_group:contains(Action)");
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_cp_action_menus .dropdown-item",
|
||||
@@ -8152,7 +8144,7 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_cp_action_menus .dropdown-toggle:contains(Action)");
|
||||
assert.containsOnce(target, ".o_cp_action_menus .dropdown-toggle");
|
||||
|
||||
await toggleActionMenu(target);
|
||||
await toggleMenuItem(target, "Action Partner");
|
||||
@@ -8203,7 +8195,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"My little Foo Value"
|
||||
);
|
||||
await editInput(target, ".o_field_widget[name='foo'] input", "test");
|
||||
assert.containsOnce(target, ".o_cp_action_menus .dropdown-toggle:contains(Action)");
|
||||
assert.containsOnce(target, ".o_cp_action_menus .dropdown-toggle");
|
||||
|
||||
await toggleActionMenu(target);
|
||||
await toggleMenuItem(target, "Action Partner");
|
||||
@@ -9206,11 +9198,11 @@ QUnit.module("Views", (hooks) => {
|
||||
</form>`,
|
||||
resId: 1,
|
||||
});
|
||||
|
||||
// Contains invisible buttons that are only displayed under xl screens
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel button:not(.fa):not(:disabled)",
|
||||
3,
|
||||
".o_control_panel_breadcrumbs button:not(.fa):not(:disabled)",
|
||||
5,
|
||||
"control panel buttons should be enabled"
|
||||
);
|
||||
assert.containsN(
|
||||
@@ -9221,17 +9213,18 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box button:not(:disabled)",
|
||||
".o-form-buttonbox button:not(:disabled)",
|
||||
"stat buttons should be enabled"
|
||||
);
|
||||
|
||||
await click(target.querySelector(".o_form_statusbar button"));
|
||||
await nextTick();
|
||||
|
||||
// The unresolved promise lets us check the state of the buttons
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel button:not(.fa):disabled",
|
||||
3,
|
||||
".o_control_panel_breadcrumbs button:not(.fa):disabled",
|
||||
5,
|
||||
"control panel buttons should be disabled"
|
||||
);
|
||||
assert.containsN(
|
||||
@@ -9242,7 +9235,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box button:disabled",
|
||||
".o-form-buttonbox button:disabled",
|
||||
"stat buttons should be disabled"
|
||||
);
|
||||
|
||||
@@ -9250,8 +9243,8 @@ QUnit.module("Views", (hooks) => {
|
||||
await nextTick();
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel button:not(.fa):not(:disabled)",
|
||||
3,
|
||||
".o_control_panel_breadcrumbs button:not(.fa):not(:disabled)",
|
||||
5,
|
||||
"control panel buttons should be enabled"
|
||||
);
|
||||
assert.containsN(
|
||||
@@ -9262,7 +9255,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box button:not(:disabled)",
|
||||
".o-form-buttonbox button:not(:disabled)",
|
||||
"stat buttons should be enabled"
|
||||
);
|
||||
});
|
||||
@@ -9306,8 +9299,8 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel button:not(.fa):not(:disabled)",
|
||||
3,
|
||||
".o_control_panel_breadcrumbs button:not(.fa):not(:disabled)",
|
||||
5,
|
||||
"control panel buttons should be enabled"
|
||||
);
|
||||
assert.containsN(
|
||||
@@ -9318,17 +9311,17 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box button:not(:disabled)",
|
||||
".o-form-buttonbox button:not(:disabled)",
|
||||
"stat buttons should be enabled"
|
||||
);
|
||||
|
||||
await click(target.querySelector(".oe_button_box button"));
|
||||
await click(target.querySelector(".o-form-buttonbox button"));
|
||||
|
||||
// The unresolved promise lets us check the state of the buttons
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel button:not(.fa):disabled",
|
||||
3,
|
||||
".o_control_panel_breadcrumbs button:not(.fa):disabled",
|
||||
5,
|
||||
"control panel buttons should be disabled"
|
||||
);
|
||||
assert.containsN(
|
||||
@@ -9339,16 +9332,16 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box button:disabled",
|
||||
".o-form-buttonbox button:disabled",
|
||||
"stat buttons should be disabled"
|
||||
);
|
||||
|
||||
def.resolve();
|
||||
|
||||
await nextTick();
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel button:not(.fa):not(:disabled)",
|
||||
3,
|
||||
".o_control_panel_breadcrumbs button:not(.fa):not(:disabled)",
|
||||
5,
|
||||
"control panel buttons should be enabled"
|
||||
);
|
||||
assert.containsN(
|
||||
@@ -9359,7 +9352,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".oe_button_box button:not(:disabled)",
|
||||
".o-form-buttonbox button:not(:disabled)",
|
||||
"stat buttons should be enabled"
|
||||
);
|
||||
});
|
||||
@@ -9538,14 +9531,14 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_external_button"));
|
||||
assert.notOk(target.querySelector(".modal .oe_button_box button").disabled);
|
||||
assert.notOk(target.querySelector(".modal .o-form-buttonbox button").disabled);
|
||||
|
||||
await click(target.querySelector(".modal .oe_button_box button"));
|
||||
assert.ok(target.querySelector(".modal .oe_button_box button").disabled);
|
||||
await click(target.querySelector(".modal .o-form-buttonbox button"));
|
||||
assert.ok(target.querySelector(".modal .o-form-buttonbox button").disabled);
|
||||
|
||||
def.resolve();
|
||||
await nextTick();
|
||||
assert.notOk(target.querySelector(".modal .oe_button_box button").disabled);
|
||||
assert.notOk(target.querySelector(".modal .o-form-buttonbox button").disabled);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -10379,7 +10372,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"yop",
|
||||
]);
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "bar");
|
||||
assert.containsN(target, ".o_group_header", 2);
|
||||
assert.containsNone(target, ".o_data_row");
|
||||
@@ -10659,7 +10652,7 @@ QUnit.module("Views", (hooks) => {
|
||||
const webClient = await createWebClient({ serverData, mockRPC });
|
||||
await doAction(webClient, 1);
|
||||
|
||||
await click(target, ".o_list_button_add");
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o_list_button_add");
|
||||
|
||||
// edit foo to trigger a delayed onchange
|
||||
onchangeDef = makeDeferred();
|
||||
@@ -10796,7 +10789,9 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
const webClient = await createWebClient({ serverData });
|
||||
await doAction(webClient, 1);
|
||||
await click(target.querySelector(".o_control_panel .o-kanban-button-new"));
|
||||
await click(
|
||||
target.querySelector(".o_control_panel_main_buttons .d-none button.o-kanban-button-new")
|
||||
);
|
||||
|
||||
//cannot save because there is a required field
|
||||
await click(target.querySelector(".o_control_panel .o_form_button_save"));
|
||||
@@ -10832,7 +10827,7 @@ QUnit.module("Views", (hooks) => {
|
||||
resId: 1,
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
await click(target.querySelector(".o-kanban-button-new"));
|
||||
|
||||
assert.containsOnce(target, ".modal");
|
||||
@@ -11335,29 +11330,29 @@ QUnit.module("Views", (hooks) => {
|
||||
await doAction(webClient, 1);
|
||||
|
||||
await click(target.querySelector(".o_data_row td.o_data_cell"));
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"first record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnerfirst record"
|
||||
);
|
||||
|
||||
await editInput(target, ".o_field_widget[name='name'] input", "aaa");
|
||||
|
||||
await click(target.querySelector(`.o_pager button.o_pager_next`));
|
||||
assert.containsOnce(target, ".o_form_editable");
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"second record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnersecond record"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector('.o_field_widget[name="name"] input').value,
|
||||
"name"
|
||||
);
|
||||
|
||||
await clickDiscard(target);
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"second record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnersecond record"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector('.o_field_widget[name="name"] input').value,
|
||||
"name"
|
||||
@@ -11365,10 +11360,10 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
await click(target.querySelector(`.o_pager button.o_pager_previous`));
|
||||
assert.containsOnce(target, ".o_form_saved");
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"first record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnerfirst record"
|
||||
);
|
||||
assert.strictEqual(target.querySelector('.o_field_widget[name="name"] input').value, "aaa");
|
||||
});
|
||||
|
||||
@@ -11411,24 +11406,24 @@ QUnit.module("Views", (hooks) => {
|
||||
await doAction(webClient, 1);
|
||||
|
||||
await click(target.querySelector(".o_data_row td.o_data_cell"));
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"first record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnerfirst record"
|
||||
);
|
||||
|
||||
await editInput(target, ".o_field_widget[name='name'] input", "aaa");
|
||||
|
||||
await click(target.querySelector(".breadcrumb-item.o_back_button"));
|
||||
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").textContent, "Partner");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").textContent, "Partner");
|
||||
assert.strictEqual(target.querySelector(".o_field_cell").textContent, "aaa");
|
||||
|
||||
await click(target.querySelector(".o_data_row td.o_data_cell"));
|
||||
assert.containsOnce(target, ".o_form_editable");
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"first record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnerfirst record"
|
||||
);
|
||||
assert.strictEqual(target.querySelector('.o_field_widget[name="name"] input').value, "aaa");
|
||||
});
|
||||
|
||||
@@ -11545,25 +11540,25 @@ QUnit.module("Views", (hooks) => {
|
||||
await doAction(webClient, 1);
|
||||
|
||||
await click(target.querySelector(".o_data_row td.o_data_cell"));
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"first record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnerfirst record"
|
||||
);
|
||||
|
||||
await editInput(target, ".o_field_widget[name='name'] input", "aaa");
|
||||
|
||||
await doAction(webClient, 2, { clearBreadcrumbs: true });
|
||||
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").textContent, "Other action");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").textContent, "Other action");
|
||||
|
||||
await doAction(webClient, 1, { clearBreadcrumbs: true });
|
||||
|
||||
await click(target.querySelector(".o_data_row td.o_data_cell"));
|
||||
assert.containsOnce(target, ".o_form_editable");
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"first record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnerfirst record"
|
||||
);
|
||||
assert.strictEqual(target.querySelector('.o_field_widget[name="name"] input').value, "aaa");
|
||||
});
|
||||
|
||||
@@ -11764,14 +11759,14 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Click on a row to open a record
|
||||
await click(target.querySelector(".o_data_row td.o_data_cell"));
|
||||
assert.deepEqual(getNodesTextContent(target.querySelectorAll(".breadcrumb li")), [
|
||||
"Partner",
|
||||
"first record",
|
||||
]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_breadcrumb").textContent,
|
||||
"Partnerfirst record"
|
||||
);
|
||||
|
||||
// Return in the list view to detach the form view
|
||||
await click(target.querySelector(".o_back_button"));
|
||||
assert.strictEqual(target.querySelector(".breadcrumb").textContent, "Partner");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb").textContent, "Partner");
|
||||
|
||||
// Simulate tab/browser close in the list
|
||||
window.dispatchEvent(new Event("beforeunload"));
|
||||
@@ -12103,13 +12098,16 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.strictEqual(target.querySelector(".o_field_widget[name='foo'] input").value, "yop");
|
||||
await editInput(target, ".o_field_widget[name='foo'] input", "test");
|
||||
|
||||
await click(target, ".o_form_button_create");
|
||||
await click(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex .o_form_button_create"
|
||||
);
|
||||
assert.verifySteps(["write"]);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_field_widget[name='foo'] input").value,
|
||||
"My little Foo Value"
|
||||
);
|
||||
assert.strictEqual(target.querySelector(".breadcrumb-item.active").textContent, "New");
|
||||
assert.strictEqual(target.querySelector(".o_breadcrumb .active").textContent, "New");
|
||||
});
|
||||
|
||||
QUnit.test("Auto save: error on save when create button clicked", async function (assert) {
|
||||
@@ -12141,7 +12139,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
await editInput(target, ".o_field_widget[name='foo'] input", "test");
|
||||
await click(target, ".o_form_button_create");
|
||||
await createRecord();
|
||||
assert.verifySteps(["write"]);
|
||||
await nextTick();
|
||||
assert.containsOnce(target, ".o_error_dialog");
|
||||
@@ -12410,7 +12408,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_form_readonly");
|
||||
await click(target.querySelector(".o_form_button_create"));
|
||||
await createRecord();
|
||||
assert.containsOnce(target, ".o_form_editable");
|
||||
});
|
||||
|
||||
@@ -12576,7 +12574,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_list_view .o_content.o_view_sample_data");
|
||||
await click(target.querySelector(".o_list_view .o_list_button_add"));
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o_list_button_add");
|
||||
assert.containsOnce(target, ".o_form_view");
|
||||
await click(target.querySelector(".o_form_view .breadcrumb-item a"));
|
||||
assert.containsOnce(target, ".o_list_view .o_content.o_view_sample_data");
|
||||
@@ -12612,7 +12610,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_list_view .o_content.o_view_sample_data");
|
||||
await click(target.querySelector(".o_list_view .o_list_button_add"));
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o_list_button_add");
|
||||
assert.containsOnce(target, ".o_form_view .o_field_x2many .o_kanban_renderer");
|
||||
assert.containsNone(target, ".o_view_nocontent");
|
||||
});
|
||||
@@ -12756,8 +12754,8 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.strictEqual(target.querySelector(".o_form_status_indicator").textContent, "");
|
||||
await clickSave(target);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_form_status_indicator").textContent.trim(),
|
||||
"Unable to save"
|
||||
target.querySelector(".o_form_status_indicator .text-danger").dataset.tooltip,
|
||||
"Unable to save. Correct the issue or discard changes"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -13045,7 +13043,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.isVisible(target.querySelector(".o_form_status_indicator_buttons"));
|
||||
|
||||
await click(target, ".o_cp_action_menus .dropdown-toggle");
|
||||
await click(target.querySelectorAll(".o_cp_action_menus .dropdown-item")[1]);
|
||||
await click(target.querySelectorAll(".o_cp_action_menus .dropdown-item")[2]);
|
||||
assert.containsOnce(target, ".modal");
|
||||
|
||||
await click(target, ".modal-footer button.btn-primary");
|
||||
|
||||
@@ -13,14 +13,11 @@ import {
|
||||
editFavoriteName,
|
||||
saveFavorite,
|
||||
switchView,
|
||||
toggleComparisonMenu,
|
||||
toggleFavoriteMenu,
|
||||
toggleFilterMenu,
|
||||
toggleGroupByMenu,
|
||||
toggleMenu,
|
||||
toggleMenuItem,
|
||||
toggleMenuItemOption,
|
||||
toggleSaveFavorite,
|
||||
toggleSearchBarMenu,
|
||||
validateSearch,
|
||||
} from "@web/../tests/search/helpers";
|
||||
import { makeView, setupViewRegistries } from "@web/../tests/views/helpers";
|
||||
@@ -2292,7 +2289,7 @@ QUnit.module("Views", (hooks) => {
|
||||
await toggleMenuItem(target, "Revenue");
|
||||
assert.strictEqual(getYAxeLabel(graph), "Revenue");
|
||||
assert.ok(true, "Message");
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Color");
|
||||
checkModeIs(assert, graph, "line");
|
||||
assert.strictEqual(getXAxeLabel(graph), "Color");
|
||||
@@ -2459,7 +2456,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, "div.o_graph_canvas_container canvas");
|
||||
assert.containsNone(target, "div.o_view_nocontent");
|
||||
assert.containsNone(target, ".abc");
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "False Domain");
|
||||
assert.containsOnce(target, "div.o_graph_canvas_container canvas");
|
||||
assert.containsNone(target, "div.o_view_nocontent");
|
||||
@@ -2484,7 +2481,7 @@ QUnit.module("Views", (hooks) => {
|
||||
`,
|
||||
});
|
||||
checkLabels(assert, graph, ["xphone", "xpad"]);
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Color");
|
||||
checkLabels(assert, graph, ["Undefined", "red"]);
|
||||
});
|
||||
@@ -2560,7 +2557,7 @@ QUnit.module("Views", (hooks) => {
|
||||
`,
|
||||
});
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "First Favorite");
|
||||
await saveFavorite(target);
|
||||
@@ -2568,23 +2565,21 @@ QUnit.module("Views", (hooks) => {
|
||||
await toggleMenu(target, "Measures");
|
||||
await toggleMenuItem(target, "Foo");
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Second Favorite");
|
||||
await saveFavorite(target);
|
||||
|
||||
await selectMode(target, "line");
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Third Favorite");
|
||||
await saveFavorite(target);
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleMenuItem(target, "Product");
|
||||
await toggleMenuItem(target, "Color");
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Fourth Favorite");
|
||||
await saveFavorite(target);
|
||||
@@ -2751,7 +2746,7 @@ QUnit.module("Views", (hooks) => {
|
||||
checkLegend(assert, graph, "Count");
|
||||
assert.strictEqual(getYAxeLabel(graph), "Count");
|
||||
checkModeIs(assert, graph, "bar");
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Context");
|
||||
checkLegend(assert, graph, "Foo");
|
||||
assert.strictEqual(getYAxeLabel(graph), "Foo");
|
||||
@@ -2780,7 +2775,7 @@ QUnit.module("Views", (hooks) => {
|
||||
</search>
|
||||
`,
|
||||
});
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "False Domain");
|
||||
});
|
||||
|
||||
@@ -2812,7 +2807,7 @@ QUnit.module("Views", (hooks) => {
|
||||
checkDatasets(assert, graph, "data", { data: [82, 157] });
|
||||
assert.strictEqual(getXAxeLabel(graph), "Product");
|
||||
assert.strictEqual(getYAxeLabel(graph), "Foo");
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "False Domain");
|
||||
checkLabels(assert, graph, []);
|
||||
checkLegend(assert, graph, []);
|
||||
@@ -2908,9 +2903,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
await toggleMenu(target, "Measures");
|
||||
assert.deepEqual(
|
||||
[...target.querySelectorAll(".o_cp_bottom_left .o_menu_item")].map(
|
||||
(el) => el.innerText
|
||||
),
|
||||
[...target.querySelectorAll(".o-dropdown .o_menu_item")].map((el) => el.innerText),
|
||||
["Foo", "Revenue", "Count"]
|
||||
);
|
||||
});
|
||||
@@ -2953,9 +2946,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
await toggleMenu(target, "Measures");
|
||||
assert.deepEqual(
|
||||
[...target.querySelectorAll(".o_cp_bottom_left .o_menu_item")].map(
|
||||
(el) => el.innerText
|
||||
),
|
||||
[...target.querySelectorAll(".o-dropdown .o_menu_item")].map((el) => el.innerText),
|
||||
["Bouh", "Foo", "Revenue", "Count"]
|
||||
);
|
||||
}
|
||||
@@ -3122,7 +3113,7 @@ QUnit.module("Views", (hooks) => {
|
||||
views: [[false, "graph"]],
|
||||
});
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_control_panel .breadcrumb-item.active").innerText,
|
||||
target.querySelector(".o_control_panel .o_breadcrumb .active:first-child").innerText,
|
||||
"Glou glou"
|
||||
);
|
||||
});
|
||||
@@ -3619,7 +3610,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, ".o_view_nocontent");
|
||||
assert.containsOnce(target, ".o_graph_canvas_container canvas");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "False Domain");
|
||||
|
||||
assert.doesNotHaveClass(
|
||||
@@ -3652,7 +3643,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsNone(target, ".o_view_nocontent");
|
||||
assert.containsOnce(target, ".o_graph_canvas_container canvas");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "False Domain");
|
||||
|
||||
assert.doesNotHaveClass(target, "o_view_sample_data");
|
||||
@@ -3704,7 +3695,7 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
checkLabels(assert, graph, ["2", "3", "4", "24", "42", "48", "53", "63"]);
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Foo");
|
||||
checkLabels(assert, graph, ["xphone", "xpad"]);
|
||||
}
|
||||
@@ -3786,7 +3777,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
|
||||
checkDatasets(assert, graph, ["data", "label"], {
|
||||
@@ -3842,7 +3833,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
|
||||
checkDatasets(assert, graph, ["data", "label"], {
|
||||
@@ -3899,7 +3890,7 @@ QUnit.module("Views", (hooks) => {
|
||||
checkDatasets(assert, graph, "data", { data: [82, 157] });
|
||||
|
||||
def = makeDeferred();
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Color");
|
||||
await toggleMenuItem(target, "Color");
|
||||
await toggleMenuItem(target, "Date");
|
||||
@@ -3984,7 +3975,7 @@ QUnit.module("Views", (hooks) => {
|
||||
`,
|
||||
});
|
||||
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
checkLabels(assert, graph, ["", ""]);
|
||||
@@ -4018,7 +4009,7 @@ QUnit.module("Views", (hooks) => {
|
||||
`,
|
||||
});
|
||||
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
checkDatasets(assert, graph, "backgroundColor", {
|
||||
@@ -4075,7 +4066,7 @@ QUnit.module("Views", (hooks) => {
|
||||
checkLabels(assert, graph, ["Q1 2016", "Q2 2016", "Undefined"]);
|
||||
checkLegend(assert, graph, "Count");
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Favorite");
|
||||
|
||||
checkModeIs(assert, graph, "bar");
|
||||
|
||||
@@ -19,12 +19,12 @@ import {
|
||||
triggerHotkey,
|
||||
} from "@web/../tests/helpers/utils";
|
||||
import {
|
||||
getButtons,
|
||||
getVisibleButtons,
|
||||
getFacetTexts,
|
||||
getPagerLimit,
|
||||
getPagerValue,
|
||||
pagerNext,
|
||||
toggleFilterMenu,
|
||||
toggleSearchBarMenu,
|
||||
validateSearch,
|
||||
} from "@web/../tests/search/helpers";
|
||||
import { makeView, setupViewRegistries } from "@web/../tests/views/helpers";
|
||||
@@ -104,7 +104,7 @@ function getTooltips(groupIndex) {
|
||||
|
||||
// Record
|
||||
async function createRecord() {
|
||||
await click(target, "button.o-kanban-button-new");
|
||||
await click(target, ".o_control_panel_main_buttons .d-none button.o-kanban-button-new");
|
||||
}
|
||||
|
||||
async function quickCreateRecord(groupIndex) {
|
||||
@@ -432,7 +432,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
QUnit.test("basic grouped rendering", async (assert) => {
|
||||
assert.expect(14);
|
||||
assert.expect(13);
|
||||
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
@@ -458,12 +458,6 @@ QUnit.module("Views", (hooks) => {
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
assert.hasClass(
|
||||
target.querySelector(".o_kanban_group"),
|
||||
"bg-200",
|
||||
"o_kanban_group should have a background"
|
||||
);
|
||||
assert.hasClass(target.querySelector(".o_kanban_view"), "o_kanban_test");
|
||||
assert.hasClass(target.querySelector(".o_kanban_renderer"), "o_kanban_grouped");
|
||||
assert.containsN(target, ".o_kanban_group", 2);
|
||||
@@ -712,7 +706,7 @@ QUnit.module("Views", (hooks) => {
|
||||
[...target.querySelectorAll(".o_kanban_group")].map((el) =>
|
||||
el.innerText.replace(/\s/g, " ")
|
||||
),
|
||||
["None (1)", "gold yop blip", "silver yop gnap"]
|
||||
["None 1", "gold yop blip", "silver yop gnap"]
|
||||
);
|
||||
|
||||
await click(getColumn(0));
|
||||
@@ -1600,7 +1594,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsN(target, ".o_kanban_group", 2);
|
||||
assert.containsNone(target, ".o_kanban_quick_add");
|
||||
|
||||
await click(target.querySelector(".o-kanban-button-new"));
|
||||
await createRecord();
|
||||
|
||||
assert.containsNone(target, ".o_kanban_quick_create");
|
||||
assert.verifySteps(["create record"]);
|
||||
@@ -1622,7 +1616,10 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
assert.containsN(target, ".o_kanban_group.o_group_draggable", 2);
|
||||
assert.containsOnce(target, ".btn-primary.o-kanban-button-new");
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex button.o-kanban-button-new"
|
||||
);
|
||||
assert.containsOnce(target, ".o_column_quick_create");
|
||||
|
||||
await createRecord();
|
||||
@@ -1996,7 +1993,7 @@ QUnit.module("Views", (hooks) => {
|
||||
groupBy: ["bar"],
|
||||
});
|
||||
|
||||
await click(target, ".o-kanban-button-new");
|
||||
await createRecord();
|
||||
assert.strictEqual(
|
||||
document.activeElement,
|
||||
target.querySelector(".o_field_widget[name=int_field] input")
|
||||
@@ -2027,7 +2024,7 @@ QUnit.module("Views", (hooks) => {
|
||||
groupBy: ["bar"],
|
||||
});
|
||||
|
||||
await click(target, ".o-kanban-button-new");
|
||||
await createRecord();
|
||||
assert.strictEqual(
|
||||
document.activeElement,
|
||||
target.querySelector(".o_field_widget[name=foo] input")
|
||||
@@ -5482,7 +5479,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.deepEqual(getFacetTexts(target), []);
|
||||
|
||||
// validate presence of the search arch info
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
assert.containsOnce(target, ".o_filter_menu .o_menu_item");
|
||||
});
|
||||
|
||||
@@ -5941,7 +5938,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsN(target, ".o_kanban_group", 2, "should still have two columns");
|
||||
assert.strictEqual(
|
||||
getColumn(0).querySelector(".o_column_title").innerText,
|
||||
"None (2)",
|
||||
"None\n2",
|
||||
"first column should have no id (Undefined column)"
|
||||
);
|
||||
|
||||
@@ -6503,7 +6500,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, ".o_kanban_group.o_column_folded");
|
||||
assert.deepEqual(
|
||||
[...target.querySelectorAll(".o_kanban_group")].map((e) => e.textContent),
|
||||
["not folded", "folded (0)"]
|
||||
["not folded", "folded0"]
|
||||
);
|
||||
});
|
||||
|
||||
@@ -8645,7 +8642,10 @@ QUnit.module("Views", (hooks) => {
|
||||
await editColumnName("new column");
|
||||
await validateColumn();
|
||||
|
||||
assert.containsOnce(target, ".o-kanban-button-new");
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_control_panel_main_buttons .d-none.d-xl-inline-flex button.o-kanban-button-new"
|
||||
);
|
||||
});
|
||||
|
||||
QUnit.test("group_by_tooltip option when grouping on a many2one", async (assert) => {
|
||||
@@ -11373,7 +11373,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.verifySteps([]);
|
||||
|
||||
await click(target, ".o-kanban-button-new");
|
||||
await createRecord();
|
||||
|
||||
assert.verifySteps(["create record"]);
|
||||
assert.containsNone(target, ".o_kanban_quick_create");
|
||||
@@ -11457,7 +11457,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.verifySteps([]);
|
||||
|
||||
await click(target, ".o-kanban-button-new");
|
||||
await createRecord();
|
||||
|
||||
assert.verifySteps(["create record"]);
|
||||
assert.containsNone(target, ".o_kanban_quick_create");
|
||||
@@ -11517,11 +11517,11 @@ QUnit.module("Views", (hooks) => {
|
||||
`,
|
||||
});
|
||||
|
||||
assert.containsNone(target, ".dropdown-menu");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu");
|
||||
await click(target, ".o_kanban_renderer .dropdown-toggle");
|
||||
assert.containsOnce(target, ".dropdown-menu");
|
||||
assert.containsOnce(target, ".o_content .dropdown-menu");
|
||||
await click(target, ".o_kanban_renderer .dropdown-menu .dropdown-item");
|
||||
assert.containsNone(target, ".dropdown-menu");
|
||||
assert.containsNone(target, ".o_content .dropdown-menu");
|
||||
});
|
||||
|
||||
QUnit.test("can use JSON in kanban template", async (assert) => {
|
||||
@@ -12276,13 +12276,13 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.containsN(getColumn(0), ".o_kanban_record", 2);
|
||||
assert.hasClass(getColumn(1), "o_column_folded");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo (2)");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo\n2");
|
||||
|
||||
await dragAndDrop(".o_kanban_group:first-child .o_kanban_record", ".o_column_folded");
|
||||
|
||||
assert.containsN(getColumn(0), ".o_kanban_record", 1);
|
||||
assert.hasClass(getColumn(1), "o_column_folded");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo (3)");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo\n3");
|
||||
});
|
||||
|
||||
QUnit.test("drag record on initially folded column should not unfold it", async (assert) => {
|
||||
@@ -12310,13 +12310,13 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.containsN(getColumn(0), ".o_kanban_record", 2);
|
||||
assert.hasClass(getColumn(1), "o_column_folded");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo (2)");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo\n2");
|
||||
|
||||
await dragAndDrop(".o_kanban_group:first-child .o_kanban_record", ".o_column_folded");
|
||||
|
||||
assert.containsN(getColumn(0), ".o_kanban_record", 1);
|
||||
assert.hasClass(getColumn(1), "o_column_folded");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo (3)");
|
||||
assert.strictEqual(getColumn(1).innerText, "xmo\n3");
|
||||
});
|
||||
|
||||
QUnit.test("drag record to folded column, with progressbars", async (assert) => {
|
||||
@@ -12356,7 +12356,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.containsN(getColumn(0), ".o_kanban_record", 2);
|
||||
assert.hasClass(getColumn(1), "o_column_folded");
|
||||
assert.strictEqual(getColumn(1).innerText, "Yes (2)");
|
||||
assert.strictEqual(getColumn(1).innerText, "Yes\n2");
|
||||
|
||||
await dragAndDrop(
|
||||
".o_kanban_group:first-child .o_kanban_record",
|
||||
@@ -12364,7 +12364,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
assert.containsOnce(getColumn(0), ".o_kanban_record");
|
||||
assert.strictEqual(getColumn(1).innerText, "Yes (3)");
|
||||
assert.strictEqual(getColumn(1).innerText, "Yes\n3");
|
||||
assert.deepEqual(
|
||||
getProgressBars(0).map((pb) => pb.style.width),
|
||||
["100%"]
|
||||
@@ -12575,8 +12575,8 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsN(target, ".o_column_folded", 2);
|
||||
|
||||
assert.strictEqual(
|
||||
getNodesTextContent(target.querySelectorAll("span.o_column_title")).join(" "),
|
||||
"hello (2) xmo (2)"
|
||||
getNodesTextContent(target.querySelectorAll(".o_column_title")).join(" "),
|
||||
"hello2 xmo2"
|
||||
);
|
||||
|
||||
assert.containsNone(target, ".o_nocontent_help");
|
||||
@@ -13084,10 +13084,10 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
const cpButtons = getButtons(target);
|
||||
const cpButtons = getVisibleButtons(target);
|
||||
assert.deepEqual(
|
||||
[...cpButtons].map((button) => button.textContent.trim()),
|
||||
["New", "display"]
|
||||
["New", "display", ""]
|
||||
);
|
||||
assert.hasClass(cpButtons[1], "display");
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ QUnit.module("Views", (hooks) => {
|
||||
class ToyComponent extends Component {}
|
||||
ToyComponent.template = xml`
|
||||
<Layout display="props.display">
|
||||
<t t-set-slot="control-panel-top-right">
|
||||
<t t-set-slot="layout-actions">
|
||||
<div class="toy_search_bar" />
|
||||
</t>
|
||||
<div class="toy_content" />
|
||||
@@ -84,7 +84,7 @@ QUnit.module("Views", (hooks) => {
|
||||
searchViewId: false,
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_control_panel .o_cp_top_right .toy_search_bar");
|
||||
assert.containsOnce(target, ".o_control_panel .o_control_panel_actions .toy_search_bar");
|
||||
assert.containsOnce(target, ".o_component_with_search_panel .o_search_panel");
|
||||
assert.containsNone(target, ".o_cp_searchview");
|
||||
assert.containsOnce(target, ".o_content > .toy_content");
|
||||
@@ -106,7 +106,7 @@ QUnit.module("Views", (hooks) => {
|
||||
}
|
||||
ToyComponent.template = xml`
|
||||
<Layout className="'o_view_sample_data'" display="{
|
||||
controlPanel: { 'top-right': false, 'bottom-right': false, 'bottom-left': false },
|
||||
controlPanel: {},
|
||||
searchPanel: true,
|
||||
}">
|
||||
<div class="toy_content" />
|
||||
@@ -122,7 +122,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.containsOnce(target, ".o_search_panel");
|
||||
assert.containsOnce(target, ".o_control_panel");
|
||||
assert.containsOnce(target, ".breadcrumb");
|
||||
assert.containsOnce(target, ".o_breadcrumb");
|
||||
assert.containsOnce(target, ".o_component_with_search_panel");
|
||||
assert.containsOnce(target, ".o_content > .toy_content");
|
||||
});
|
||||
@@ -159,7 +159,7 @@ QUnit.module("Views", (hooks) => {
|
||||
}
|
||||
ToyB.template = xml`
|
||||
<Layout className="'toy_b'" display="props.display">
|
||||
<t t-set-slot="control-panel-top-right">
|
||||
<t t-set-slot="layout-actions">
|
||||
<div class="toy_b_breadcrumbs" />
|
||||
</t>
|
||||
<ToyC/>
|
||||
@@ -170,7 +170,7 @@ QUnit.module("Views", (hooks) => {
|
||||
class ToyA extends Component {}
|
||||
ToyA.template = xml`
|
||||
<Layout className="'toy_a'" display="props.display">
|
||||
<t t-set-slot="control-panel-top-right">
|
||||
<t t-set-slot="layout-actions">
|
||||
<div class="toy_a_search" />
|
||||
</t>
|
||||
<ToyB display="props.display"/>
|
||||
@@ -291,21 +291,21 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
QUnit.test("Simple rendering: with dynamically displayed search", async (assert) => {
|
||||
let displayControlPanelTopRight = true;
|
||||
let displayLayoutActions = true;
|
||||
class ToyComponent extends Component {
|
||||
get display() {
|
||||
return {
|
||||
...this.props.display,
|
||||
controlPanel: {
|
||||
...this.props.display.controlPanel,
|
||||
"top-right": displayControlPanelTopRight,
|
||||
layoutActions: displayLayoutActions,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
ToyComponent.template = xml`
|
||||
<Layout display="display">
|
||||
<t t-set-slot="control-panel-top-right">
|
||||
<t t-set-slot="layout-actions">
|
||||
<div class="toy_search_bar" />
|
||||
</t>
|
||||
<div class="toy_content" />
|
||||
@@ -319,16 +319,16 @@ QUnit.module("Views", (hooks) => {
|
||||
searchViewId: false,
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_control_panel .o_cp_top_right .toy_search_bar");
|
||||
assert.containsOnce(target, ".o_control_panel .o_control_panel_actions .toy_search_bar");
|
||||
assert.containsOnce(target, ".o_component_with_search_panel .o_search_panel");
|
||||
assert.containsNone(target, ".o_cp_searchview");
|
||||
assert.containsOnce(target, ".o_content > .toy_content");
|
||||
|
||||
displayControlPanelTopRight = false;
|
||||
displayLayoutActions = false;
|
||||
comp.render();
|
||||
await nextTick();
|
||||
|
||||
assert.containsNone(target, ".o_control_panel .o_cp_top_right .toy_search_bar");
|
||||
assert.containsNone(target, ".o_control_panel .o_control_panel_actions .toy_search_bar");
|
||||
assert.containsOnce(target, ".o_component_with_search_panel .o_search_panel");
|
||||
assert.containsNone(target, ".o_cp_searchview");
|
||||
assert.containsOnce(target, ".o_content > .toy_content");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -26,10 +26,7 @@ import {
|
||||
setupControlPanelFavoriteMenuRegistry,
|
||||
setupControlPanelServiceRegistry,
|
||||
toggleAddCustomGroup,
|
||||
toggleComparisonMenu,
|
||||
toggleFavoriteMenu,
|
||||
toggleFilterMenu,
|
||||
toggleGroupByMenu,
|
||||
toggleSearchBarMenu,
|
||||
toggleMenu,
|
||||
toggleMenuItem,
|
||||
toggleMenuItemOption,
|
||||
@@ -265,9 +262,9 @@ QUnit.module("Views", (hooks) => {
|
||||
</pivot>`,
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_cp_bottom_left .dropdown-menu .dropdown-item").innerText,
|
||||
target.querySelector(".o_pivot_buttons .dropdown-menu .dropdown-item").innerText,
|
||||
"BAR"
|
||||
);
|
||||
assert.strictEqual(
|
||||
@@ -366,9 +363,9 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// there should be only one displayed measure as the other one is invisible
|
||||
assert.containsOnce(target, ".o_pivot_measure_row");
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
// there should be only one measure besides count, as the other one is invisible
|
||||
assert.containsN(target, ".o_cp_bottom_left .dropdown-menu .dropdown-item", 2);
|
||||
assert.containsN(target, ".o_pivot_buttons .dropdown-menu .dropdown-item", 2);
|
||||
// the invisible field souldn't be in the groupable fields neither
|
||||
await click(target.querySelector(".o_pivot_header_cell_closed"));
|
||||
assert.containsNone(target, '.dropdown-menu a[data-field="foo2"]');
|
||||
@@ -432,10 +429,10 @@ QUnit.module("Views", (hooks) => {
|
||||
</pivot>`,
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_cp_bottom_left .dropdown-menu .dropdown-item:contains(Computed and not stored)"
|
||||
".o_pivot_buttons .dropdown-menu .dropdown-item:contains(Computed and not stored)"
|
||||
);
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_pivot_measure_row").innerText,
|
||||
@@ -580,7 +577,7 @@ QUnit.module("Views", (hooks) => {
|
||||
context: { search_default_date_filter: true },
|
||||
});
|
||||
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
// hover Count in first group
|
||||
@@ -648,7 +645,7 @@ QUnit.module("Views", (hooks) => {
|
||||
context: { search_default_date_filter: true },
|
||||
});
|
||||
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
// hover the second origin in second group
|
||||
@@ -773,7 +770,7 @@ QUnit.module("Views", (hooks) => {
|
||||
context: { search_default_date_filter: true },
|
||||
});
|
||||
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
assert.hasClass(target.querySelector("table"), "o_enable_linking");
|
||||
@@ -829,9 +826,9 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left .dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_cp_bottom_left .dropdown-menu .dropdown-item");
|
||||
const measure = target.querySelector(".o_cp_bottom_left .dropdown-menu .dropdown-item");
|
||||
await click(target.querySelector(".o_pivot_buttons .dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_pivot_buttons .dropdown-menu .dropdown-item");
|
||||
const measure = target.querySelector(".o_pivot_buttons .dropdown-menu .dropdown-item");
|
||||
assert.strictEqual(measure.innerText, "Count");
|
||||
assert.hasClass(measure, "selected", "The count measure should be selected");
|
||||
});
|
||||
@@ -861,7 +858,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.strictEqual(readGroupCount, 1, "should have done 1 rpc");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Some Filter");
|
||||
assert.containsOnce(
|
||||
target,
|
||||
@@ -1064,16 +1061,16 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// open group by dropdown
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
3,
|
||||
"should have 3 dropdown items in searchview groupby"
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_add_custom_group_menu",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_add_custom_group_menu",
|
||||
"should have custom group generator in searchview groupby"
|
||||
);
|
||||
|
||||
@@ -1129,10 +1126,10 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// open group by dropdown
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
2,
|
||||
"should have 2 dropdown items in searchview groupby"
|
||||
);
|
||||
@@ -1147,12 +1144,12 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// add a custom group in searchview groupby
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleAddCustomGroup(target);
|
||||
await applyGroup(target);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
3,
|
||||
"should have 3 dropdown items in searchview groupby now"
|
||||
);
|
||||
@@ -1179,10 +1176,10 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// applying custom groupby in pivot groupby dropdown will not update search dropdown
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
3,
|
||||
"should still have 3 dropdown items in searchview groupby dropdown"
|
||||
);
|
||||
@@ -1208,10 +1205,10 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// open group by dropdown
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
2,
|
||||
"should have 2 dropdown items in searchview groupby"
|
||||
);
|
||||
@@ -1219,7 +1216,7 @@ QUnit.module("Views", (hooks) => {
|
||||
await applyGroup(target);
|
||||
assert.containsN(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
3,
|
||||
"should have 3 dropdown items in searchview groupby now"
|
||||
);
|
||||
@@ -1333,15 +1330,15 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// open group by dropdown
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
"should not have any dropdown item in searchview groupby"
|
||||
);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_add_custom_group_menu",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_add_custom_group_menu",
|
||||
"should have add custom group item in searchview groupby"
|
||||
);
|
||||
// click on closed header to open dropdown
|
||||
@@ -1403,15 +1400,15 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// open group by dropdown
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_menu_item",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_menu_item",
|
||||
"should have 1 dropdown item in searchview groupby"
|
||||
);
|
||||
assert.containsNone(
|
||||
target,
|
||||
".o_control_panel .o_cp_bottom_right .dropdown-menu .o_add_custom_group_menu",
|
||||
".o_control_panel .o_cp_searchview .dropdown-menu .o_add_custom_group_menu",
|
||||
"should not have custom group generator in searchview groupby"
|
||||
);
|
||||
|
||||
@@ -1497,16 +1494,16 @@ QUnit.module("Views", (hooks) => {
|
||||
"should have 3 cells: 1 for the open header, and 2 for data"
|
||||
);
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
assert.doesNotHaveClass(
|
||||
$(target).find(".dropdown-item:contains(Count)"),
|
||||
"selected",
|
||||
"the __count measure should not be selected"
|
||||
);
|
||||
await click($(target).find(".o_cp_bottom_left .dropdown-item:contains(Count)")[0]);
|
||||
await click($(target).find(".o_pivot_buttons .dropdown-item:contains(Count)")[0]);
|
||||
|
||||
assert.hasClass(
|
||||
$(target).find(".o_cp_bottom_left .dropdown-item:contains(Count)"),
|
||||
$(target).find(".o_pivot_buttons .dropdown-item:contains(Count)"),
|
||||
"selected",
|
||||
"the __count measure should be selected"
|
||||
);
|
||||
@@ -1518,7 +1515,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
assert.strictEqual(rpcCount, 2, "should have done 2 rpcs to reload data");
|
||||
|
||||
await click($(target).find(".o_cp_bottom_left .dropdown-item:contains(Count)")[0]);
|
||||
await click($(target).find(".o_pivot_buttons .dropdown-item:contains(Count)")[0]);
|
||||
|
||||
assert.doesNotHaveClass(
|
||||
$(target).find(".dropdown-item:contains(Count)")[0],
|
||||
@@ -1545,8 +1542,8 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsNone(target, ".o_view_nocontent");
|
||||
assert.containsOnce(target, "table");
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
await click($(target).find(".o_cp_bottom_left .dropdown-item:contains(Count)")[0]);
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
await click($(target).find(".o_pivot_buttons .dropdown-item:contains(Count)")[0]);
|
||||
|
||||
assert.containsOnce(target, ".o_view_nocontent");
|
||||
assert.containsNone(target, "table");
|
||||
@@ -1567,7 +1564,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsNone(target, ".o_view_nocontent");
|
||||
assert.containsOnce(target, "table");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Some Filter");
|
||||
|
||||
assert.containsOnce(target, ".o_view_nocontent");
|
||||
@@ -1606,7 +1603,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, ".o_searchview .o_searchview_facet");
|
||||
assert.containsOnce(target, ".o_view_nocontent");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Some Filter");
|
||||
assert.containsN(target, ".o_searchview .o_searchview_facet", 2);
|
||||
assert.containsOnce(target, ".o_view_nocontent");
|
||||
@@ -1659,7 +1656,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"should have 1 row for measure Foo"
|
||||
);
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
assert.containsNone(target, "table");
|
||||
|
||||
@@ -1701,7 +1698,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, ".o_pivot_cell_value", "should have only 1 cell");
|
||||
assert.containsOnce(target, "tbody tr", "should have 1 rows");
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Product");
|
||||
|
||||
assert.containsN(target, ".o_pivot_cell_value", 3, "should have 3 cells");
|
||||
@@ -1781,7 +1778,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// expand on date:days, product
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "Month");
|
||||
nbReadGroups = 0;
|
||||
@@ -1835,7 +1832,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// expand on date:days, product
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "Month");
|
||||
await toggleMenuItem(target, "Product");
|
||||
@@ -1963,7 +1960,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: [],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Fav1");
|
||||
await saveFavorite(target);
|
||||
@@ -1977,7 +1974,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: [],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Fav2");
|
||||
await saveFavorite(target);
|
||||
@@ -1991,7 +1988,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: ["product_id"],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Fav3");
|
||||
await saveFavorite(target);
|
||||
@@ -2051,7 +2048,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: ["product_id"],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "1");
|
||||
await saveFavorite(target);
|
||||
@@ -2064,7 +2061,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: [],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "2");
|
||||
await saveFavorite(target);
|
||||
@@ -2078,7 +2075,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: [],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "3");
|
||||
await saveFavorite(target);
|
||||
@@ -2092,7 +2089,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: ["product_id"],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "4");
|
||||
await saveFavorite(target);
|
||||
@@ -2106,7 +2103,7 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["foo"],
|
||||
pivot_row_groupby: ["product_id"],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "5");
|
||||
await saveFavorite(target);
|
||||
@@ -2139,7 +2136,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// Apply both groupbys
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Product");
|
||||
assert.strictEqual(
|
||||
target.querySelector("tbody .o_pivot_header_cell_closed").textContent,
|
||||
@@ -2198,7 +2195,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// Apply BAR groupbys
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Bar");
|
||||
assert.strictEqual(
|
||||
target.querySelector("tbody .o_pivot_header_cell_closed").textContent,
|
||||
@@ -2317,7 +2314,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// activate the unique existing favorite
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, 0);
|
||||
|
||||
assert.strictEqual(
|
||||
@@ -2358,7 +2355,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// activate AGAIN the unique existing favorite
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, 0);
|
||||
|
||||
assert.strictEqual(
|
||||
@@ -2446,7 +2443,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// Equivalent to unload the filter
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My fake favorite");
|
||||
// collapse all headers
|
||||
await click(target, ".o_pivot_header_cell_opened:first-child");
|
||||
@@ -2488,7 +2485,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Equivalent to load another filter
|
||||
await removeFacet(target); // remove previously saved favorite
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My fake favorite 2");
|
||||
|
||||
// Check Columns
|
||||
@@ -2553,7 +2550,7 @@ QUnit.module("Views", (hooks) => {
|
||||
await click(target.querySelectorAll("thead .dropdown-item")[1]);
|
||||
|
||||
// Set a domain
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter 1");
|
||||
|
||||
// Save to favorites and check that column groupbys were not lost
|
||||
@@ -2563,7 +2560,6 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["__count"],
|
||||
pivot_row_groupby: [],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "My favorite 1");
|
||||
await saveFavorite(target);
|
||||
@@ -2574,7 +2570,7 @@ QUnit.module("Views", (hooks) => {
|
||||
await click(target.querySelectorAll("thead .dropdown-menu .dropdown-item")[4]);
|
||||
|
||||
// Set a domain
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter 2");
|
||||
|
||||
expectedContext = {
|
||||
@@ -2583,7 +2579,6 @@ QUnit.module("Views", (hooks) => {
|
||||
pivot_measures: ["__count"],
|
||||
pivot_row_groupby: [],
|
||||
};
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "My favorite 2");
|
||||
await saveFavorite(target);
|
||||
@@ -2626,7 +2621,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.strictEqual(getCurrentValues(target), values.join(","));
|
||||
|
||||
// reload (should keep folded groups folded as col/row groupbys didn't change)
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Dummy Filter");
|
||||
|
||||
assert.strictEqual(getCurrentValues(target), values.join(","));
|
||||
@@ -2692,11 +2687,10 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, "table");
|
||||
|
||||
// Set a domain for empty results
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter 1");
|
||||
assert.containsNone(target, "table");
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "My favorite 1");
|
||||
await saveFavorite(target);
|
||||
@@ -2705,11 +2699,10 @@ QUnit.module("Views", (hooks) => {
|
||||
await removeFacet(target); // remove previously saved favorite
|
||||
assert.containsOnce(target, "table");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter 2");
|
||||
assert.containsOnce(target, "table");
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "My favorite 2");
|
||||
await saveFavorite(target);
|
||||
@@ -2807,7 +2800,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.strictEqual(target.querySelectorAll(".o_pivot_cell_value")[4].innerText, ""); // xphone December 2016
|
||||
|
||||
// invert axis, and reopen column groupings
|
||||
await click(target.querySelector(".o_cp_bottom_left .o_pivot_flip_button"));
|
||||
await click(target.querySelector(".o_pivot_buttons .o_pivot_flip_button"));
|
||||
await click(target.querySelector("thead .o_pivot_header_cell_opened"));
|
||||
await click(target.querySelector("thead .o_pivot_header_cell_closed"));
|
||||
await click(target.querySelectorAll("thead .dropdown-menu .dropdown-item")[4]);
|
||||
@@ -2847,7 +2840,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// select filter "Bayou" in control panel
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Bayou");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -2889,7 +2882,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// select filter "Bayou" in control panel
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Bayou");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -2906,7 +2899,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// unselect filter "Bayou" in control panel
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Bayou");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -2964,7 +2957,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"the active measure should be amount"
|
||||
);
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My fake favorite");
|
||||
|
||||
assert.containsOnce(
|
||||
@@ -3145,13 +3138,13 @@ QUnit.module("Views", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_cp_bottom_left .dropdown-item");
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_pivot_buttons .dropdown-item");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_cp_bottom_left .dropdown-item").innerText,
|
||||
target.querySelector(".o_pivot_buttons .dropdown-item").innerText,
|
||||
"Count"
|
||||
);
|
||||
assert.hasClass(target.querySelector(".o_cp_bottom_left .dropdown-item"), "selected");
|
||||
assert.hasClass(target.querySelector(".o_pivot_buttons .dropdown-item"), "selected");
|
||||
});
|
||||
|
||||
QUnit.test("not use a many2one as a measure by default", async function (assert) {
|
||||
@@ -3167,13 +3160,13 @@ QUnit.module("Views", (hooks) => {
|
||||
<field name="date" interval="month" type="col"/>
|
||||
</pivot>`,
|
||||
});
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_cp_bottom_left .dropdown-item");
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_pivot_buttons .dropdown-item");
|
||||
assert.strictEqual(
|
||||
target.querySelector(".o_cp_bottom_left .dropdown-item").innerText,
|
||||
target.querySelector(".o_pivot_buttons .dropdown-item").innerText,
|
||||
"Count"
|
||||
);
|
||||
assert.hasClass(target.querySelector(".o_cp_bottom_left .dropdown-item"), "selected");
|
||||
assert.hasClass(target.querySelector(".o_pivot_buttons .dropdown-item"), "selected");
|
||||
});
|
||||
|
||||
QUnit.test("pivot view with many2one field as a measure", async function (assert) {
|
||||
@@ -3261,7 +3254,7 @@ QUnit.module("Views", (hooks) => {
|
||||
await click(target.querySelectorAll("tbody .dropdown-item")[4]);
|
||||
|
||||
// Add a filter
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Some Filter");
|
||||
|
||||
assert.containsOnce(
|
||||
@@ -3276,7 +3269,6 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// Save current search to favorite
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "My favorite");
|
||||
await saveFavorite(target);
|
||||
@@ -3312,7 +3304,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, "tbody tr", "should have 1 row initially");
|
||||
|
||||
def = makeDeferred();
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Product");
|
||||
await toggleMenuItem(target, "Customer");
|
||||
|
||||
@@ -3361,9 +3353,9 @@ QUnit.module("Views", (hooks) => {
|
||||
</pivot>`,
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
assert.strictEqual(
|
||||
[...target.querySelectorAll(".o_cp_bottom_left .dropdown-item")]
|
||||
[...target.querySelectorAll(".o_pivot_buttons .dropdown-item")]
|
||||
.map((i) => i.innerText)
|
||||
.join(""),
|
||||
"bouhFoomoddZipCount"
|
||||
@@ -3479,12 +3471,11 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// with no data
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
assert.containsOnce(target, "p.o_view_nocontent_empty_folder");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "December");
|
||||
await toggleMenuItemOption(target, "Date", "2016");
|
||||
@@ -3530,10 +3521,10 @@ QUnit.module("Views", (hooks) => {
|
||||
];
|
||||
assert.strictEqual(getCurrentValues(target), values.join());
|
||||
|
||||
await click(target.querySelector(".o_cp_bottom_left button.dropdown-toggle"));
|
||||
await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle"));
|
||||
|
||||
await click(target.querySelectorAll(".o_cp_bottom_left .dropdown-menu .dropdown-item")[0]);
|
||||
await click(target.querySelectorAll(".o_cp_bottom_left .dropdown-menu .dropdown-item")[1]);
|
||||
await click(target.querySelectorAll(".o_pivot_buttons .dropdown-menu .dropdown-item")[0]);
|
||||
await click(target.querySelectorAll(".o_pivot_buttons .dropdown-menu .dropdown-item")[1]);
|
||||
values = ["2,0,-100%,0,2,100%,2,2,0%,2,0,-100%,0,1,100%,2,1,-50%,0,1,100%,0,1,100%"];
|
||||
assert.strictEqual(getCurrentValues(target), values.join());
|
||||
|
||||
@@ -3541,7 +3532,7 @@ QUnit.module("Views", (hooks) => {
|
||||
values = ["2", "2", "0%", "2", "1", "-50%", "0", "1", "100%"];
|
||||
assert.strictEqual(getCurrentValues(target), values.join());
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Fav");
|
||||
await saveFavorite(target);
|
||||
@@ -3596,7 +3587,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// open comparison menu
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
// compare October 2016 to September 2016
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
@@ -3604,17 +3595,16 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, "p.o_view_nocontent_empty_folder", "there should be no data");
|
||||
// export data should be impossible since the pivot buttons
|
||||
// are deactivated (exception: the 'Measures' button).
|
||||
assert.ok(target.querySelector(".o_control_panel button.o_pivot_download").disabled);
|
||||
assert.ok(target.querySelector(".o_pivot_buttons button.o_pivot_download").disabled);
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "December");
|
||||
await toggleMenuItemOption(target, "Date", "October");
|
||||
assert.notOk(target.querySelector(".o_control_panel button.o_pivot_download").disabled);
|
||||
assert.notOk(target.querySelector(".o_pivot_buttons button.o_pivot_download").disabled);
|
||||
|
||||
// With the data above, the time ranges contain some records.
|
||||
// export data. Should execute 'get_file'
|
||||
await click(target.querySelector(".o_control_panel button.o_pivot_download"));
|
||||
await click(target.querySelector(".o_pivot_buttons button.o_pivot_download"));
|
||||
|
||||
assert.verifySteps([
|
||||
// col group headers
|
||||
@@ -3673,7 +3663,7 @@ QUnit.module("Views", (hooks) => {
|
||||
mockMock = true;
|
||||
|
||||
// compare December 2016 to November 2016
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
const values = ["0", "4", "100%", "0", "2", "100%", "0", "2", "100%"];
|
||||
@@ -3715,7 +3705,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// compare December 2016 to November 2016
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
// initial sanity check
|
||||
@@ -3968,21 +3958,21 @@ QUnit.module("Views", (hooks) => {
|
||||
arch: `<pivot><field name="foo" type="measure"/></pivot>`,
|
||||
});
|
||||
|
||||
assert.containsNone(target, ".o_cp_bottom_left .dropdown-menu");
|
||||
assert.containsNone(target, ".o_pivot_buttons .dropdown-menu");
|
||||
|
||||
// open the "Measures" menu
|
||||
await click(target.querySelector(".o_cp_bottom_left .dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_cp_bottom_left .dropdown-menu");
|
||||
await click(target.querySelector(".o_pivot_buttons .dropdown-toggle"));
|
||||
assert.containsOnce(target, ".o_pivot_buttons .dropdown-menu");
|
||||
|
||||
// click on the divider in the "Measures" menu does not crash
|
||||
await click(target.querySelector(".o_cp_bottom_left .dropdown-menu .dropdown-divider"));
|
||||
await click(target.querySelector(".o_pivot_buttons .dropdown-menu .dropdown-divider"));
|
||||
// the menu should still be open
|
||||
assert.containsOnce(target, ".o_cp_bottom_left .dropdown-menu");
|
||||
assert.containsOnce(target, ".o_pivot_buttons .dropdown-menu");
|
||||
|
||||
// click on the measure list but not on a menu item or the separator
|
||||
await click(target.querySelector(".o_cp_bottom_left .dropdown-menu"));
|
||||
await click(target.querySelector(".o_pivot_buttons .dropdown-menu"));
|
||||
// the menu should still be open
|
||||
assert.containsOnce(target, ".o_cp_bottom_left .dropdown-menu");
|
||||
assert.containsOnce(target, ".o_pivot_buttons .dropdown-menu");
|
||||
});
|
||||
|
||||
QUnit.test(
|
||||
@@ -4038,7 +4028,7 @@ QUnit.module("Views", (hooks) => {
|
||||
views: [[false, "pivot"]],
|
||||
});
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, 0);
|
||||
await nextTick();
|
||||
|
||||
@@ -4090,7 +4080,7 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// compare December 2016 to November 2016
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
// initial sanity check
|
||||
@@ -4237,12 +4227,11 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// Filter on December 2016
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "December");
|
||||
|
||||
// compare December 2016 to November 2016
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous period");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -4384,7 +4373,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// open group by menu and add new groupby
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleAddCustomGroup(target);
|
||||
await applyGroup(target);
|
||||
|
||||
@@ -4415,7 +4404,7 @@ QUnit.module("Views", (hooks) => {
|
||||
);
|
||||
|
||||
// open groupby menu generator and add a new groupby
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleAddCustomGroup(target);
|
||||
await selectGroup(target, "bar");
|
||||
await applyGroup(target);
|
||||
@@ -4648,7 +4637,7 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsNone(target, ".o_view_nocontent .abc");
|
||||
assert.containsOnce(target, "table");
|
||||
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Small Than 0");
|
||||
|
||||
assert.doesNotHaveClass(target, "o_view_sample_data");
|
||||
@@ -4911,7 +4900,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
assert.strictEqual(getCurrentValues(target), values.join(","));
|
||||
|
||||
@@ -4951,7 +4940,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
assert.strictEqual(getCurrentValues(target), ["32", "12", "20"].join(","));
|
||||
|
||||
@@ -4992,7 +4981,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
assert.strictEqual(getCurrentValues(target), ["32", "12", "20"].join(","));
|
||||
|
||||
@@ -5033,7 +5022,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
assert.strictEqual(getCurrentValues(target), ["32", "12", "20"].join(","));
|
||||
|
||||
@@ -5079,7 +5068,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
assert.strictEqual(getCurrentValues(target), ["32", "12", "12", "20"].join(","));
|
||||
|
||||
@@ -5122,7 +5111,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// Set a domain (this reload is delayed)
|
||||
def = makeDeferred();
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My Filter");
|
||||
|
||||
assert.strictEqual(getCurrentValues(target), ["32", "12", "20"].join(","));
|
||||
@@ -5215,13 +5204,13 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
// "Count" is the only measure available
|
||||
assert.deepEqual(
|
||||
[...target.querySelectorAll(".o_cp_bottom_left .dropdown-menu .o_menu_item")].map(
|
||||
[...target.querySelectorAll(".o_pivot_buttons .dropdown-menu .o_menu_item")].map(
|
||||
(e) => e.innerText
|
||||
),
|
||||
["Count"]
|
||||
);
|
||||
// No separator should be displayed in the menu "Measures"
|
||||
assert.containsNone(target, ".o_cp_bottom_left .dropdown-menu div.dropdown-divider");
|
||||
assert.containsNone(target, ".o_pivot_buttons .dropdown-menu div.dropdown-divider");
|
||||
});
|
||||
|
||||
QUnit.test(
|
||||
@@ -5257,11 +5246,10 @@ QUnit.module("Views", (hooks) => {
|
||||
});
|
||||
|
||||
// compare 2021 to 2020
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "2021");
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleMenuItem(target, 0);
|
||||
await toggleMenuItem(target.querySelector(".o_comparison_menu"), 0);
|
||||
|
||||
assert.deepEqual(
|
||||
[...target.querySelectorAll("th")].slice(0, 6).map((el) => el.innerText),
|
||||
@@ -5333,7 +5321,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"The row headers should be as expected"
|
||||
);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Favorite");
|
||||
await saveFavorite(target);
|
||||
@@ -5352,7 +5340,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"The row headers should be as expected"
|
||||
);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Favorite");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -5361,7 +5349,6 @@ QUnit.module("Views", (hooks) => {
|
||||
"The row headers should be as expected"
|
||||
);
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleMenuItem(target, "Customer");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -5380,7 +5367,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"The row headers should be as expected"
|
||||
);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Favorite 2");
|
||||
await saveFavorite(target);
|
||||
@@ -5429,7 +5416,7 @@ QUnit.module("Views", (hooks) => {
|
||||
"The row headers should be as expected"
|
||||
);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Favorite");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -5492,7 +5479,7 @@ QUnit.module("Views", (hooks) => {
|
||||
["Total", "", "No", "Yes", "Computed and not stored"]
|
||||
);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "My favorite 2");
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -5554,7 +5541,7 @@ QUnit.module("Views", (hooks) => {
|
||||
["Total", "Computed and not stored"]
|
||||
);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "Favorite");
|
||||
await saveFavorite(target);
|
||||
|
||||
@@ -19,6 +19,11 @@ import { makeFakeUserService } from "../../helpers/mock_services";
|
||||
|
||||
const serviceRegistry = registry.category("services");
|
||||
|
||||
async function exportAllAction(target) {
|
||||
await click(target, ".o_cp_action_menus .dropdown-toggle");
|
||||
await click(target, ".o_cp_action_menus .dropdown-item");
|
||||
}
|
||||
|
||||
QUnit.module("ViewDialogs", (hooks) => {
|
||||
let serverData;
|
||||
let target;
|
||||
@@ -947,7 +952,7 @@ QUnit.module("ViewDialogs", (hooks) => {
|
||||
domain: [["bar", "!=", "glou"]],
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_list_export_xlsx"));
|
||||
await exportAllAction(target);
|
||||
});
|
||||
|
||||
QUnit.test("Direct export grouped list ", async function (assert) {
|
||||
@@ -999,7 +1004,7 @@ QUnit.module("ViewDialogs", (hooks) => {
|
||||
domain: [["bar", "!=", "glou"]],
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_list_export_xlsx"));
|
||||
await exportAllAction(target);
|
||||
});
|
||||
|
||||
QUnit.test("Export dialog with duplicated fields", async function (assert) {
|
||||
|
||||
@@ -19,8 +19,7 @@ import {
|
||||
editFavoriteName,
|
||||
removeFacet,
|
||||
saveFavorite,
|
||||
toggleFavoriteMenu,
|
||||
toggleFilterMenu,
|
||||
toggleSearchBarMenu,
|
||||
toggleMenuItem,
|
||||
toggleSaveFavorite,
|
||||
} from "@web/../tests/search/helpers";
|
||||
@@ -401,13 +400,12 @@ QUnit.module("ViewDialogs", (hooks) => {
|
||||
assert.containsN(target, ".o_data_row", 3, "should contain 3 records");
|
||||
|
||||
// filter on bar
|
||||
await toggleFilterMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Bar");
|
||||
|
||||
assert.containsN(target, ".o_data_row", 2, "should contain 2 records");
|
||||
|
||||
// save filter
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "some name");
|
||||
await saveFavorite(target);
|
||||
|
||||
Reference in New Issue
Block a user