[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:
@@ -2,7 +2,6 @@
|
||||
|
||||
import { getFixture, patchDate, patchWithCleanup } from "@web/../tests/helpers/utils";
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import {
|
||||
getFacetTexts,
|
||||
makeWithSearch,
|
||||
@@ -12,6 +11,7 @@ import {
|
||||
toggleFilterMenu,
|
||||
toggleMenuItem,
|
||||
toggleMenuItemOption,
|
||||
DropDownMenusTestComponent,
|
||||
} from "./helpers";
|
||||
|
||||
let target;
|
||||
@@ -51,12 +51,12 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter", "comparison"],
|
||||
searchViewId: false,
|
||||
});
|
||||
assert.containsOnce(target, ".dropdown.o_filter_menu");
|
||||
assert.containsNone(target, ".dropdown.o_comparison_menu");
|
||||
// assert.containsNone(target, ".dropdown.o_comparison_menu"); // TODO: Logic not mock in makeWithSearchs
|
||||
await toggleFilterMenu(target);
|
||||
await toggleMenuItem(target, "Birthday");
|
||||
await toggleMenuItemOption(target, "Birthday", "January");
|
||||
@@ -65,7 +65,7 @@ QUnit.module("Search", (hooks) => {
|
||||
target
|
||||
.querySelector("div.o_comparison_menu > button span")
|
||||
.innerText.trim()
|
||||
.toUpperCase() /** @todo why do I need to upperCase */,
|
||||
.toUpperCase(),
|
||||
"COMPARISON"
|
||||
);
|
||||
await toggleComparisonMenu(target);
|
||||
@@ -87,7 +87,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter", "comparison"],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -106,7 +106,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleMenuItem(target, "Date: Previous Year");
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
["Birthday: January 1997", "Date: December 1996"].join("or"),
|
||||
["Birthday: January 1997", "Date: December 1996"].join("\nor\n"),
|
||||
"Date: Previous Year",
|
||||
]);
|
||||
await toggleFilterMenu(target);
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { click, getFixture, mount, nextTick } from "@web/../tests/helpers/utils";
|
||||
import { click, getFixture, nextTick } from "@web/../tests/helpers/utils";
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import { makeWithSearch, setupControlPanelServiceRegistry } from "./helpers";
|
||||
import { Component, xml } from "@odoo/owl";
|
||||
import { makeTestEnv } from "../helpers/mock_env";
|
||||
|
||||
let target;
|
||||
let serverData;
|
||||
@@ -39,16 +37,15 @@ QUnit.module("Search", (hooks) => {
|
||||
searchMenuTypes: [],
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_cp_top");
|
||||
assert.containsOnce(target, ".o_cp_top_left");
|
||||
assert.strictEqual(target.querySelector(".o_cp_top_right").innerHTML, "");
|
||||
assert.containsOnce(target, ".o_cp_bottom");
|
||||
assert.containsOnce(target, ".o_cp_bottom_left");
|
||||
assert.containsOnce(target, ".o_cp_bottom_right");
|
||||
assert.containsOnce(target, ".o_control_panel_breadcrumbs");
|
||||
assert.containsOnce(target, ".o_control_panel_actions");
|
||||
assert.strictEqual(target.querySelector(".o_control_panel_actions").innerHTML, "");
|
||||
assert.containsOnce(target, ".o_control_panel_navigation");
|
||||
assert.strictEqual(target.querySelector(".o_control_panel_navigation").innerHTML, "");
|
||||
|
||||
assert.containsNone(target, ".o_cp_switch_buttons");
|
||||
|
||||
assert.containsOnce(target, ".breadcrumb");
|
||||
assert.containsOnce(target, ".o_breadcrumb");
|
||||
});
|
||||
|
||||
QUnit.test("breadcrumbs", async (assert) => {
|
||||
@@ -65,8 +62,9 @@ QUnit.module("Search", (hooks) => {
|
||||
searchMenuTypes: [],
|
||||
});
|
||||
|
||||
assert.containsN(target, ".breadcrumb li.breadcrumb-item", 2);
|
||||
const breadcrumbItems = target.querySelectorAll("li.breadcrumb-item");
|
||||
const breadcrumbsSelector = ".o_breadcrumb li.breadcrumb-item, .o_breadcrumb .active";
|
||||
assert.containsN(target, breadcrumbsSelector, 2);
|
||||
const breadcrumbItems = target.querySelectorAll(breadcrumbsSelector);
|
||||
assert.strictEqual(breadcrumbItems[0].innerText, "Previous");
|
||||
assert.hasClass(breadcrumbItems[1], "active");
|
||||
assert.strictEqual(breadcrumbItems[1].innerText, "Current");
|
||||
@@ -93,7 +91,10 @@ QUnit.module("Search", (hooks) => {
|
||||
searchMenuTypes: [],
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_cp_switch_buttons");
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_control_panel_navigation .d-xl-inline-flex.o_cp_switch_buttons"
|
||||
);
|
||||
assert.containsN(target, ".o_switch_view", 2);
|
||||
const views = target.querySelectorAll(".o_switch_view");
|
||||
|
||||
@@ -134,23 +135,4 @@ QUnit.module("Search", (hooks) => {
|
||||
await nextTick();
|
||||
assert.containsNone(target, ".o_pager");
|
||||
});
|
||||
|
||||
QUnit.test("control panel without bottom-right specifics", async (assert) => {
|
||||
class CustomPage extends Component {}
|
||||
CustomPage.components = { ControlPanel };
|
||||
CustomPage.template = xml`
|
||||
<ControlPanel display="{'top-right':false}">
|
||||
<t t-set-slot="control-panel-bottom-right">
|
||||
<div class="o_new_bottom_right">Something else</div>
|
||||
</t>
|
||||
</ControlPanel>
|
||||
`;
|
||||
// Minimal config, still needs at least an empty breadcrumbs to setup a control_panel
|
||||
const env = await makeTestEnv();
|
||||
Object.assign(env, { config: { breadcrumbs: [] } });
|
||||
await mount(CustomPage, target, { env });
|
||||
assert.containsOnce(target, ".o_new_bottom_right");
|
||||
assert.containsNone(target, ".o_cp_switch_buttons");
|
||||
assert.containsNone(target, ".o_pager");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
import { getFixture, patchWithCleanup, triggerEvent } from "@web/../tests/helpers/utils";
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
import { registry } from "@web/core/registry";
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import { FavoriteMenu } from "@web/search/favorite_menu/favorite_menu";
|
||||
import { useSetupAction } from "@web/webclient/actions/action_hook";
|
||||
import {
|
||||
@@ -16,10 +15,12 @@ import {
|
||||
setupControlPanelServiceRegistry,
|
||||
toggleFavoriteMenu,
|
||||
toggleSaveFavorite,
|
||||
toggleSearchBarMenu,
|
||||
validateSearch,
|
||||
} from "./helpers";
|
||||
|
||||
import { Component, xml } from "@odoo/owl";
|
||||
import { SearchBar } from "@web/search/search_bar/search_bar";
|
||||
const serviceRegistry = registry.category("services");
|
||||
|
||||
/**
|
||||
@@ -79,7 +80,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["favorite"],
|
||||
searchViewId: false,
|
||||
config: {
|
||||
@@ -87,7 +88,7 @@ QUnit.module("Search", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
assert.strictEqual(
|
||||
target.querySelector('.o_add_favorite input[type="text"]').value,
|
||||
@@ -107,12 +108,12 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["favorite"],
|
||||
searchViewId: false,
|
||||
});
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
const checkboxes = target.querySelectorAll('input[type="checkbox"]');
|
||||
|
||||
@@ -211,8 +212,8 @@ QUnit.module("Search", (hooks) => {
|
||||
}
|
||||
},
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
searchMenuTypes: ["favorite"],
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["filter", "favorite"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
<search>
|
||||
@@ -224,7 +225,7 @@ QUnit.module("Search", (hooks) => {
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Filter"]);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "My favorite");
|
||||
await saveFavorite(target);
|
||||
@@ -245,7 +246,7 @@ QUnit.module("Search", (hooks) => {
|
||||
}
|
||||
},
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["favorite"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -262,7 +263,7 @@ QUnit.module("Search", (hooks) => {
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Foo\na"]);
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await editFavoriteName(target, "My favorite");
|
||||
await saveFavorite(target);
|
||||
@@ -312,7 +313,7 @@ QUnit.module("Search", (hooks) => {
|
||||
}
|
||||
},
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["favorite"],
|
||||
searchViewId: false,
|
||||
irFilters: [
|
||||
@@ -328,7 +329,7 @@ QUnit.module("Search", (hooks) => {
|
||||
],
|
||||
});
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
|
||||
// first try: should fail
|
||||
@@ -345,44 +346,47 @@ QUnit.module("Search", (hooks) => {
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test("undefined name for filter shows notification and not error", async function (assert) {
|
||||
assert.expect(2);
|
||||
QUnit.test(
|
||||
"undefined name for filter shows notification and not error",
|
||||
async function (assert) {
|
||||
assert.expect(2);
|
||||
|
||||
serviceRegistry.add(
|
||||
"notification",
|
||||
{
|
||||
start() {
|
||||
return {
|
||||
add(message, options) {
|
||||
assert.strictEqual(
|
||||
message,
|
||||
"A name for your favorite filter is required.",
|
||||
"The notification should match: A name for your favorite filter is required."
|
||||
);
|
||||
assert.deepEqual(options, { type: "danger" });
|
||||
},
|
||||
};
|
||||
serviceRegistry.add(
|
||||
"notification",
|
||||
{
|
||||
start() {
|
||||
return {
|
||||
add(message, options) {
|
||||
assert.strictEqual(
|
||||
message,
|
||||
"A name for your favorite filter is required.",
|
||||
"The notification should match: A name for your favorite filter is required."
|
||||
);
|
||||
assert.deepEqual(options, { type: "danger" });
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
{ force: true }
|
||||
);
|
||||
{ force: true }
|
||||
);
|
||||
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
mockRPC: (_, args) => {
|
||||
if (args.model === "ir.filters" && args.method === "create_or_replace") {
|
||||
return 7; // fake serverSideId
|
||||
}
|
||||
},
|
||||
resModel: "foo",
|
||||
Component: FavoriteMenu,
|
||||
searchViewId: false,
|
||||
});
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
mockRPC: (_, args) => {
|
||||
if (args.model === "ir.filters" && args.method === "create_or_replace") {
|
||||
return 7; // fake serverSideId
|
||||
}
|
||||
},
|
||||
resModel: "foo",
|
||||
Component: FavoriteMenu,
|
||||
searchViewId: false,
|
||||
});
|
||||
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await saveFavorite(target);
|
||||
});
|
||||
await toggleFavoriteMenu(target);
|
||||
await toggleSaveFavorite(target);
|
||||
await saveFavorite(target);
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.skip("save search filter in modal", async function (assert) {
|
||||
/** @todo I don't know yet how to convert this test */
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import { getFixture, patchWithCleanup } from "../helpers/utils";
|
||||
import {
|
||||
applyGroup,
|
||||
@@ -11,9 +10,10 @@ import {
|
||||
makeWithSearch,
|
||||
setupControlPanelServiceRegistry,
|
||||
toggleAddCustomGroup,
|
||||
toggleGroupByMenu,
|
||||
toggleMenuItem,
|
||||
toggleSearchBarMenu,
|
||||
} from "./helpers";
|
||||
import { SearchBar } from "@web/search/search_bar/search_bar";
|
||||
|
||||
let target;
|
||||
let serverData;
|
||||
@@ -52,12 +52,12 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
});
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
|
||||
const customGroupByItem = target.querySelector(".o_add_custom_group_menu");
|
||||
assert.strictEqual(customGroupByItem.innerText.trim(), "Add Custom Group");
|
||||
@@ -85,7 +85,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewFields: {
|
||||
@@ -94,7 +94,7 @@ QUnit.module("Search", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleAddCustomGroup(target);
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -116,7 +116,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewFields: {
|
||||
@@ -130,7 +130,7 @@ QUnit.module("Search", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleAddCustomGroup(target);
|
||||
|
||||
assert.deepEqual(
|
||||
@@ -152,7 +152,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewFields: {
|
||||
@@ -160,7 +160,7 @@ QUnit.module("Search", (hooks) => {
|
||||
id: { sortable: true, string: "ID", type: "integer" },
|
||||
},
|
||||
});
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
|
||||
assert.deepEqual(controlPanel.env.searchModel.groupBy, []);
|
||||
assert.containsNone(target, ".o_menu_item");
|
||||
@@ -184,14 +184,14 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewFields: {
|
||||
date: { sortable: true, name: "date", string: "Super Date", type: "date" },
|
||||
},
|
||||
});
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
|
||||
const addCustomGroupMenu = target.querySelector(".o_add_custom_group_menu");
|
||||
|
||||
@@ -220,7 +220,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewFields: {
|
||||
candle_light: {
|
||||
@@ -231,7 +231,7 @@ QUnit.module("Search", (hooks) => {
|
||||
},
|
||||
});
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleAddCustomGroup(target);
|
||||
await applyGroup(target);
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
import { click, getFixture, patchDate } from "@web/../tests/helpers/utils";
|
||||
import { createWebClient, doAction } from "@web/../tests/webclient/helpers";
|
||||
import { registry } from "@web/core/registry";
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import { FavoriteMenu } from "@web/search/favorite_menu/favorite_menu";
|
||||
import { SearchBar } from "@web/search/search_bar/search_bar";
|
||||
import {
|
||||
@@ -16,6 +15,7 @@ import {
|
||||
toggleComparisonMenu,
|
||||
toggleFavoriteMenu,
|
||||
toggleMenuItem,
|
||||
DropDownMenusTestComponent,
|
||||
} from "@web/../tests/search/helpers";
|
||||
|
||||
import { Component, onWillUpdateProps, xml } from "@odoo/owl";
|
||||
@@ -28,6 +28,7 @@ function getDomain(comp) {
|
||||
|
||||
let serverData;
|
||||
let target;
|
||||
|
||||
QUnit.module("Search", (hooks) => {
|
||||
hooks.beforeEach(async () => {
|
||||
target = getFixture();
|
||||
@@ -64,7 +65,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["favorite"],
|
||||
searchViewId: false,
|
||||
config: {
|
||||
@@ -97,7 +98,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["favorite"],
|
||||
searchViewId: false,
|
||||
config: {
|
||||
@@ -208,7 +209,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["favorite"],
|
||||
searchViewId: false,
|
||||
irFilters: [
|
||||
@@ -241,7 +242,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter", "groupBy", "comparison", "favorite"],
|
||||
searchViewId: false,
|
||||
irFilters: [
|
||||
|
||||
@@ -9,7 +9,6 @@ import {
|
||||
patchWithCleanup,
|
||||
} from "@web/../tests/helpers/utils";
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import {
|
||||
getFacetTexts,
|
||||
isItemSelected,
|
||||
@@ -20,6 +19,7 @@ import {
|
||||
toggleFilterMenu,
|
||||
toggleMenuItem,
|
||||
toggleMenuItemOption,
|
||||
DropDownMenusTestComponent,
|
||||
} from "./helpers";
|
||||
|
||||
function getDomain(controlPanel) {
|
||||
@@ -68,7 +68,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
});
|
||||
|
||||
@@ -83,7 +83,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -109,7 +109,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -132,7 +132,7 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.deepEqual(getFacetTexts(target), ["Foo"]);
|
||||
assert.containsOnce(
|
||||
target.querySelector(".o_searchview .o_searchview_facet"),
|
||||
"span.fa.fa-filter.o_searchview_facet_label"
|
||||
".o_searchview_facet_label"
|
||||
);
|
||||
assert.ok(isItemSelected(target, "Foo"));
|
||||
assert.deepEqual(getDomain(controlPanel), [["foo", "=", "qsdf"]]);
|
||||
@@ -152,7 +152,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -382,7 +382,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -416,7 +416,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -443,7 +443,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -469,7 +469,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -493,7 +493,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -519,7 +519,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -547,7 +547,7 @@ QUnit.module("Search", (hooks) => {
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
"Filter Group 1",
|
||||
"Filter 1 Group 2orFilter 2 GROUP 2",
|
||||
"Filter 1 Group 2\nor\nFilter 2 GROUP 2",
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -557,7 +557,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewArch: `
|
||||
@@ -600,7 +600,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
});
|
||||
|
||||
@@ -628,7 +628,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
});
|
||||
await toggleFilterMenu(target);
|
||||
@@ -652,7 +652,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
});
|
||||
await toggleFilterMenu(target);
|
||||
@@ -670,7 +670,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
});
|
||||
await toggleFilterMenu(target);
|
||||
@@ -696,7 +696,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -756,7 +756,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `<search />`,
|
||||
@@ -781,7 +781,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["filter"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `<search />`,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import { getFixture, patchWithCleanup } from "../helpers/utils";
|
||||
import {
|
||||
getFacetTexts,
|
||||
@@ -13,6 +12,7 @@ import {
|
||||
toggleGroupByMenu,
|
||||
toggleMenuItem,
|
||||
toggleMenuItemOption,
|
||||
DropDownMenusTestComponent,
|
||||
} from "./helpers";
|
||||
|
||||
let target;
|
||||
@@ -54,7 +54,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewFields: {},
|
||||
@@ -74,7 +74,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -90,7 +90,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -115,7 +115,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -141,7 +141,7 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.deepEqual(getFacetTexts(target), ["Foo"]);
|
||||
assert.containsOnce(
|
||||
target.querySelector(".o_searchview .o_searchview_facet"),
|
||||
"span.oi.oi-group.o_searchview_facet_label"
|
||||
".o_searchview_facet_label"
|
||||
);
|
||||
assert.ok(isItemSelected(target, "Foo"));
|
||||
|
||||
@@ -158,7 +158,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -184,7 +184,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -218,7 +218,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -245,19 +245,19 @@ QUnit.module("Search", (hooks) => {
|
||||
const steps = [
|
||||
{
|
||||
description: "Year",
|
||||
facetTexts: ["Date: Year>Date: Week"],
|
||||
facetTexts: ["Date: Year\n>\nDate: Week"],
|
||||
selectedoptions: ["Year", "Week"],
|
||||
groupBy: ["date_field:year", "date_field:week"],
|
||||
},
|
||||
{
|
||||
description: "Month",
|
||||
facetTexts: ["Date: Year>Date: Month>Date: Week"],
|
||||
facetTexts: ["Date: Year\n>\nDate: Month\n>\nDate: Week"],
|
||||
selectedoptions: ["Year", "Month", "Week"],
|
||||
groupBy: ["date_field:year", "date_field:month", "date_field:week"],
|
||||
},
|
||||
{
|
||||
description: "Week",
|
||||
facetTexts: ["Date: Year>Date: Month"],
|
||||
facetTexts: ["Date: Year\n>\nDate: Month"],
|
||||
selectedoptions: ["Year", "Month"],
|
||||
groupBy: ["date_field:year", "date_field:month"],
|
||||
},
|
||||
@@ -286,7 +286,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -309,43 +309,49 @@ QUnit.module("Search", (hooks) => {
|
||||
// select option 'week'
|
||||
await toggleMenuItemOption(target, "Date", "Week");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Bar>Date: Week"]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Bar\n>\nDate: Week"]);
|
||||
|
||||
// select option 'day'
|
||||
await toggleMenuItemOption(target, "Date", "Day");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Bar>Date: Week>Date: Day"]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Bar\n>\nDate: Week\n>\nDate: Day"]);
|
||||
|
||||
// select option 'year'
|
||||
await toggleMenuItemOption(target, "Date", "Year");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Bar>Date: Year>Date: Week>Date: Day"]);
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
"Bar\n>\nDate: Year\n>\nDate: Week\n>\nDate: Day",
|
||||
]);
|
||||
|
||||
// select 'Foo'
|
||||
await toggleMenuItem(target, "Foo");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Bar>Date: Year>Date: Week>Date: Day>Foo"]);
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
"Bar\n>\nDate: Year\n>\nDate: Week\n>\nDate: Day\n>\nFoo",
|
||||
]);
|
||||
|
||||
// select option 'quarter'
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "Quarter");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
"Bar>Date: Year>Date: Quarter>Date: Week>Date: Day>Foo",
|
||||
"Bar\n>\nDate: Year\n>\nDate: Quarter\n>\nDate: Week\n>\nDate: Day\n>\nFoo",
|
||||
]);
|
||||
|
||||
// unselect 'Bar'
|
||||
await toggleMenuItem(target, "Bar");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
"Date: Year>Date: Quarter>Date: Week>Date: Day>Foo",
|
||||
"Date: Year\n>\nDate: Quarter\n>\nDate: Week\n>\nDate: Day\n>\nFoo",
|
||||
]);
|
||||
|
||||
// unselect option 'week'
|
||||
await toggleMenuItem(target, "Date");
|
||||
await toggleMenuItemOption(target, "Date", "Week");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Year>Date: Quarter>Date: Day>Foo"]);
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
"Date: Year\n>\nDate: Quarter\n>\nDate: Day\n>\nFoo",
|
||||
]);
|
||||
});
|
||||
|
||||
QUnit.test("default groupbys can be ordered", async function (assert) {
|
||||
@@ -354,7 +360,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -371,7 +377,7 @@ QUnit.module("Search", (hooks) => {
|
||||
"date_field:week",
|
||||
"birthday:month",
|
||||
]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Week>Birthday: Month"]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Week\n>\nBirthday: Month"]);
|
||||
});
|
||||
|
||||
QUnit.test("a separator in groupbys does not cause problems", async function (assert) {
|
||||
@@ -380,7 +386,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -407,7 +413,7 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.ok(isItemSelected(target, "Date"));
|
||||
assert.ok(isItemSelected(target, "Bar"));
|
||||
assert.ok(isOptionSelected(target, "Date", "Day"), "selected");
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Day>Bar"]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Day\n>\nBar"]);
|
||||
|
||||
await toggleMenuItemOption(target, "Date", "Quarter");
|
||||
|
||||
@@ -415,7 +421,7 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.ok(isItemSelected(target, "Bar"));
|
||||
assert.ok(isOptionSelected(target, "Date", "Quarter"), "selected");
|
||||
assert.ok(isOptionSelected(target, "Date", "Day"), "selected");
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Quarter>Date: Day>Bar"]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Quarter\n>\nDate: Day\n>\nBar"]);
|
||||
|
||||
await toggleMenuItem(target, "Bar");
|
||||
await toggleMenuItem(target, "Date");
|
||||
@@ -424,7 +430,7 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.notOk(isItemSelected(target, "Bar"));
|
||||
assert.ok(isOptionSelected(target, "Date", "Quarter"), "selected");
|
||||
assert.ok(isOptionSelected(target, "Date", "Day"), "selected");
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Quarter>Date: Day"]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Date: Quarter\n>\nDate: Day"]);
|
||||
|
||||
await removeFacet(target);
|
||||
|
||||
@@ -445,7 +451,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -467,7 +473,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
<search>
|
||||
@@ -490,7 +496,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
<search>
|
||||
@@ -514,7 +520,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "foo",
|
||||
Component: ControlPanel,
|
||||
Component: DropDownMenusTestComponent,
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
<search>
|
||||
|
||||
@@ -21,6 +21,11 @@ import { popoverService } from "@web/core/popover/popover_service";
|
||||
import { registry } from "@web/core/registry";
|
||||
import { CustomFavoriteItem } from "@web/search/favorite_menu/custom_favorite_item";
|
||||
import { WithSearch } from "@web/search/with_search/with_search";
|
||||
import { FilterMenu } from "@web/search/filter_menu/filter_menu";
|
||||
import { GroupByMenu } from "@web/search/group_by_menu/group_by_menu";
|
||||
import { ComparisonMenu } from "@web/search/comparison_menu/comparison_menu";
|
||||
import { FavoriteMenu } from "@web/search/favorite_menu/favorite_menu";
|
||||
import { SearchBar } from "@web/search/search_bar/search_bar";
|
||||
import { getDefaultConfig } from "@web/views/view";
|
||||
import { viewService } from "@web/views/view_service";
|
||||
import { actionService } from "@web/webclient/actions/action_service";
|
||||
@@ -196,7 +201,18 @@ export function getMenuItemTexts(target) {
|
||||
}
|
||||
|
||||
export function getButtons(el) {
|
||||
return [...el.querySelector(`div.o_cp_bottom div.o_cp_buttons`).children];
|
||||
return [...el.querySelectorAll(`div.o_control_panel_breadcrumbs button`)];
|
||||
}
|
||||
|
||||
export function getVisibleButtons(el) {
|
||||
return [
|
||||
...$(el).find(
|
||||
[
|
||||
"div.o_control_panel_breadcrumbs button:visible", // button in the breadcrumbs
|
||||
"div.o_control_panel_actions button:visible", // buttons for list selection
|
||||
].join(",")
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
/** Filter menu */
|
||||
@@ -280,7 +296,7 @@ export async function applyGroup(el) {
|
||||
}
|
||||
|
||||
export async function groupByMenu(el, fieldName) {
|
||||
await toggleGroupByMenu(el);
|
||||
await toggleSearchBarMenu(el);
|
||||
await toggleAddCustomGroup(el);
|
||||
await selectGroup(el, fieldName);
|
||||
await applyGroup(el);
|
||||
@@ -331,7 +347,7 @@ export function getFacetTexts(target) {
|
||||
|
||||
export async function removeFacet(el, facetFinder = 0) {
|
||||
const facet = findItem(el, `div.o_searchview_facet`, facetFinder);
|
||||
await click(facet.querySelector("i.o_facet_remove"));
|
||||
await click(facet.querySelector(".o_facet_remove"));
|
||||
}
|
||||
|
||||
export async function editSearch(el, value) {
|
||||
@@ -384,7 +400,34 @@ export async function editPager(el, value) {
|
||||
* @param {string} [menuFinder="Action"]
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export async function toggleActionMenu(el, menuFinder = "Action") {
|
||||
const dropdown = findItem(el, `.o_cp_action_menus button`, menuFinder);
|
||||
await click(dropdown);
|
||||
export async function toggleActionMenu(el) {
|
||||
await click(el.querySelector(".o_cp_action_menus .dropdown-toggle"));
|
||||
}
|
||||
|
||||
/** SearchBarMenu */
|
||||
export async function toggleSearchBarMenu(el) {
|
||||
await click(findItem(el, `.o_searchview_dropdown_toggler`));
|
||||
}
|
||||
|
||||
export class DropDownMenusTestComponent extends Component {
|
||||
get components() {
|
||||
const componentMapping = {
|
||||
filter: FilterMenu,
|
||||
groupBy: GroupByMenu,
|
||||
comparison: ComparisonMenu,
|
||||
favorite: FavoriteMenu,
|
||||
};
|
||||
return (
|
||||
Array.from(this.env.searchModel.searchMenuTypes).map(
|
||||
(comp) => componentMapping[comp]
|
||||
) || []
|
||||
);
|
||||
}
|
||||
}
|
||||
DropDownMenusTestComponent.template = xml`
|
||||
<SearchBar/>
|
||||
<t t-foreach="components" t-as="component" t-key="component">
|
||||
<t t-component="component"/>
|
||||
</t>
|
||||
`;
|
||||
DropDownMenusTestComponent.components = { SearchBar };
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,5 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { ControlPanel } from "@web/search/control_panel/control_panel";
|
||||
import {
|
||||
click,
|
||||
getFixture,
|
||||
@@ -9,7 +8,6 @@ import {
|
||||
nextTick,
|
||||
patchDate,
|
||||
patchTimeZone,
|
||||
patchWithCleanup,
|
||||
triggerEvent,
|
||||
} from "../helpers/utils";
|
||||
import {
|
||||
@@ -18,9 +16,8 @@ import {
|
||||
makeWithSearch,
|
||||
removeFacet,
|
||||
setupControlPanelServiceRegistry,
|
||||
toggleComparisonMenu,
|
||||
toggleGroupByMenu,
|
||||
toggleMenuItem,
|
||||
toggleSearchBarMenu,
|
||||
validateSearch,
|
||||
} from "./helpers";
|
||||
|
||||
@@ -32,7 +29,8 @@ function getDomain(controlPanel) {
|
||||
return controlPanel.env.searchModel.domain;
|
||||
}
|
||||
|
||||
import { onWillUpdateProps } from "@odoo/owl";
|
||||
import { Component, onWillUpdateProps, xml } from "@odoo/owl";
|
||||
import { SearchBar } from "@web/search/search_bar/search_bar";
|
||||
|
||||
let target;
|
||||
let serverData;
|
||||
@@ -143,7 +141,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -161,7 +159,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
context: { search_default_date_group_by: 1 },
|
||||
@@ -190,7 +188,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"],
|
||||
searchViewId: false,
|
||||
context: {
|
||||
@@ -236,7 +234,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -248,7 +246,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await triggerEvent(searchInput, null, "keydown", { key: "Enter" }); // select
|
||||
|
||||
assert.deepEqual(
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/, " ")),
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/g, " ")),
|
||||
["Birthday 07/15/1983"],
|
||||
"The format of the date in the facet should be in locale"
|
||||
);
|
||||
@@ -265,8 +263,8 @@ QUnit.module("Search", (hooks) => {
|
||||
await triggerEvent(searchInput, null, "keydown", { key: "Enter" }); // select
|
||||
|
||||
assert.deepEqual(
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/, " ")),
|
||||
["Birth DateTime\n07/15/1983 00:00:00"],
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/g, " ")),
|
||||
["Birth DateTime 07/15/1983 00:00:00"],
|
||||
"The format of the datetime in the facet should be in locale"
|
||||
);
|
||||
|
||||
@@ -279,7 +277,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -324,7 +322,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -352,19 +350,20 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.expect(8);
|
||||
|
||||
let updateCount = 0;
|
||||
patchWithCleanup(ControlPanel.prototype, {
|
||||
class TestComponent extends Component {
|
||||
setup() {
|
||||
this._super();
|
||||
onWillUpdateProps(() => {
|
||||
updateCount++;
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
TestComponent.template = xml`<SearchBar/>`;
|
||||
TestComponent.components = { SearchBar };
|
||||
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: TestComponent,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -378,8 +377,8 @@ QUnit.module("Search", (hooks) => {
|
||||
await triggerEvent(searchInput, null, "keydown", { key: "Enter" });
|
||||
|
||||
assert.deepEqual(
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/, "")),
|
||||
["BarFirst record"]
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/g, " ")),
|
||||
["Bar First record"]
|
||||
);
|
||||
|
||||
assert.strictEqual(updateCount, 1);
|
||||
@@ -396,8 +395,8 @@ QUnit.module("Search", (hooks) => {
|
||||
await triggerEvent(searchInput, null, "keydown", { key: "Enter" });
|
||||
|
||||
assert.deepEqual(
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/, "")),
|
||||
["BarFirst recordorSecond record"]
|
||||
getFacetTexts(target).map((str) => str.replace(/\s+/g, " ")),
|
||||
["Bar First record or Second record"]
|
||||
);
|
||||
|
||||
assert.strictEqual(updateCount, 2);
|
||||
@@ -410,19 +409,20 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.expect(2);
|
||||
|
||||
let updateCount = 0;
|
||||
patchWithCleanup(ControlPanel.prototype, {
|
||||
class TestComponent extends Component {
|
||||
setup() {
|
||||
this._super();
|
||||
onWillUpdateProps(() => {
|
||||
updateCount++;
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
TestComponent.template = xml`<SearchBar/>`;
|
||||
TestComponent.components = { SearchBar };
|
||||
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: TestComponent,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -440,7 +440,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -487,7 +487,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -588,7 +588,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -610,7 +610,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -647,7 +647,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -672,7 +672,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -719,7 +719,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -759,7 +759,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -801,7 +801,7 @@ QUnit.module("Search", (hooks) => {
|
||||
serverData,
|
||||
mockRPC,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -840,7 +840,7 @@ QUnit.module("Search", (hooks) => {
|
||||
serverData,
|
||||
mockRPC,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -867,7 +867,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -895,7 +895,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -926,7 +926,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: /*xml*/ `
|
||||
@@ -989,7 +989,7 @@ QUnit.module("Search", (hooks) => {
|
||||
serverData,
|
||||
mockRPC,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
});
|
||||
@@ -1029,18 +1029,18 @@ QUnit.module("Search", (hooks) => {
|
||||
serverData,
|
||||
mockRPC,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
context: { search_default_company: 1 },
|
||||
});
|
||||
|
||||
await nextTick();
|
||||
assert.containsNone(target, ".o_control_panel");
|
||||
assert.containsNone(target, ".o_cp_searchview");
|
||||
|
||||
def.resolve();
|
||||
await nextTick();
|
||||
assert.containsOnce(target, ".o_control_panel");
|
||||
assert.containsOnce(target, ".o_cp_searchview");
|
||||
assert.strictEqual(getFacetTexts(target)[0].replace("\n", ""), "CompanyFirst record");
|
||||
});
|
||||
|
||||
@@ -1050,7 +1050,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -1147,7 +1147,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -1211,7 +1211,7 @@ QUnit.module("Search", (hooks) => {
|
||||
]);
|
||||
|
||||
// expand the selection properties
|
||||
await click(target.querySelector(".o_control_panel"));
|
||||
await click(target.querySelector(".o_cp_searchview"));
|
||||
await editSearch(target, "a");
|
||||
await click(target.querySelector(".o_expand"));
|
||||
items = target.querySelectorAll(".o_searchview_input_container li");
|
||||
@@ -1233,7 +1233,7 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.deepEqual(getDomain(controlPanel), expectedDomain);
|
||||
|
||||
// select the selection option "A"
|
||||
await click(target.querySelector(".o_control_panel"));
|
||||
await click(target.querySelector(".o_cp_searchview"));
|
||||
await editSearch(target, "a");
|
||||
await click(target.querySelector(".o_expand"));
|
||||
await click(target.querySelector(".o_searchview_input_container li:nth-child(4)"));
|
||||
@@ -1257,7 +1257,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await click(target.querySelector(".o_facet_remove"));
|
||||
|
||||
// search a many2one value
|
||||
await click(target.querySelector(".o_control_panel"));
|
||||
await click(target.querySelector(".o_cp_searchview"));
|
||||
await editSearch(target, "Ali");
|
||||
await click(target.querySelector(".o_expand"));
|
||||
await click(target.querySelector("li:nth-child(2) .o_expand"));
|
||||
@@ -1270,7 +1270,7 @@ QUnit.module("Search", (hooks) => {
|
||||
assert.deepEqual(getDomain(controlPanel), expectedDomain);
|
||||
|
||||
// search a tag value
|
||||
await click(target.querySelector(".o_control_panel"));
|
||||
await click(target.querySelector(".o_cp_searchview"));
|
||||
await editSearch(target, "A");
|
||||
await click(target.querySelector(".o_expand"));
|
||||
items = target.querySelectorAll(".o_searchview_input_container li");
|
||||
@@ -1290,7 +1290,7 @@ QUnit.module("Search", (hooks) => {
|
||||
];
|
||||
assert.deepEqual(getDomain(controlPanel), expectedDomain);
|
||||
// add the tag "B"
|
||||
await click(target.querySelector(".o_control_panel"));
|
||||
await click(target.querySelector(".o_cp_searchview"));
|
||||
await editSearch(target, "B");
|
||||
await click(target.querySelector(".o_expand"));
|
||||
items = target.querySelectorAll(".o_searchview_input_container li");
|
||||
@@ -1402,7 +1402,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: [],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -1414,7 +1414,7 @@ QUnit.module("Search", (hooks) => {
|
||||
context: { active_id: 2 },
|
||||
});
|
||||
|
||||
await click(target.querySelector(".o_control_panel"));
|
||||
await click(target.querySelector(".o_cp_searchview"));
|
||||
await editSearch(target, "a");
|
||||
await click(target.querySelector(".o_expand"));
|
||||
|
||||
@@ -1427,7 +1427,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"], // we need it to have facet (see facets getter in search_model)
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -1490,7 +1490,7 @@ QUnit.module("Search", (hooks) => {
|
||||
const controlPanel = await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
<search>
|
||||
@@ -1527,7 +1527,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["groupBy"], // we need it to have facet (see facets getter in search_model)
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -1543,7 +1543,7 @@ QUnit.module("Search", (hooks) => {
|
||||
".o_searchview_facet.o_facet_with_domain .o_searchview_facet_label"
|
||||
);
|
||||
|
||||
await toggleGroupByMenu(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Company");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["My favorite", "Company"]);
|
||||
@@ -1562,7 +1562,7 @@ QUnit.module("Search", (hooks) => {
|
||||
|
||||
await click(target.querySelector(".modal footer button"));
|
||||
assert.containsNone(target, ".modal");
|
||||
assert.deepEqual(getFacetTexts(target), ["Bool>Company", 'Foo contains "abc"']);
|
||||
assert.deepEqual(getFacetTexts(target), ["Bool\n>\nCompany", 'Foo contains "abc"']);
|
||||
});
|
||||
|
||||
QUnit.test("edit a date filter with comparison active", async function (assert) {
|
||||
@@ -1570,7 +1570,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchMenuTypes: ["filter", "comparison"],
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
@@ -1588,8 +1588,8 @@ QUnit.module("Search", (hooks) => {
|
||||
".o_searchview_facet.o_facet_with_domain .o_searchview_facet_label"
|
||||
);
|
||||
|
||||
await toggleComparisonMenu(target);
|
||||
await toggleMenuItem(target);
|
||||
await toggleSearchBarMenu(target);
|
||||
await toggleMenuItem(target, "Birthday: Previous Period");
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), [
|
||||
"Birthday: April 2023",
|
||||
@@ -1628,7 +1628,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await makeWithSearch({
|
||||
serverData,
|
||||
resModel: "partner",
|
||||
Component: ControlPanel,
|
||||
Component: SearchBar,
|
||||
searchViewId: false,
|
||||
searchViewArch: `
|
||||
<search>
|
||||
@@ -1650,7 +1650,7 @@ QUnit.module("Search", (hooks) => {
|
||||
await triggerEvent(searchInput, null, "keydown", { key: "ArrowDown" });
|
||||
await triggerEvent(searchInput, null, "keydown", { key: "Enter" }); // select
|
||||
|
||||
assert.deepEqual(getFacetTexts(target), ["Foo\nabcordef"]);
|
||||
assert.deepEqual(getFacetTexts(target), ["Foo\nabc\nor\ndef"]);
|
||||
|
||||
await click(target, ".o_facet_with_domain .o_searchview_facet_label");
|
||||
assert.containsN(target, ".o_domain_leaf", 2);
|
||||
|
||||
Reference in New Issue
Block a user