/** @odoo-module **/ import { getFixture, patchWithCleanup } from "@web/../tests/helpers/utils"; import { menuService } from "@web/webclient/menus/menu_service"; import { toggleSearchBarMenu, toggleMenuItem, toggleMenuItemOption, } from "@web/../tests/search/helpers"; import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; import { registry } from "@web/core/registry"; import { mock } from "@web/../tests/legacy/helpers/test_utils"; import { browser } from "@web/core/browser/browser"; const patchDate = mock.patchDate; const serviceRegistry = registry.category("services"); const forecastDomain = (forecastStart) => { return ["|", ["date_field", "=", false], ["date_field", ">=", forecastStart]]; }; let serverData; let target; QUnit.module("Views", (hooks) => { hooks.beforeEach(async () => { serverData = { models: { foo: { fields: { date_field: { string: "Date Field", type: "date", store: true, sortable: true, }, bar: { string: "Bar", type: "many2one", relation: "partner", store: true, sortable: true, }, value: { string: "Value", type: "float", store: true, sortable: true, }, number: { string: "Number", type: "integer", store: true, sortable: true, } }, records: [], }, partner: {}, }, views: { "foo,false,legacy_toy": ``, "foo,false,graph": ``, "foo,false,search": ` `, }, }; setupViewRegistries(); serviceRegistry.add("menu", menuService); target = getFixture(); }); QUnit.module("Forecast views"); QUnit.test("Forecast graph view", async function (assert) { assert.expect(5); patchWithCleanup(browser, { setTimeout: (fn) => fn() }); const unpatchDate = patchDate(2021, 8, 16, 16, 54, 0); const expectedDomains = [ forecastDomain("2021-09-01"), // month granularity due to no groupby forecastDomain("2021-09-16"), // day granularity due to simple bar groupby // quarter granularity due to date field groupby activated with quarter interval option forecastDomain("2021-07-01"), // quarter granularity due to date field groupby activated with quarter and year interval option forecastDomain("2021-01-01"), // forecast filter no more active [], ]; await makeView({ resModel: "foo", type: "graph", serverData, searchViewId: false, context: { search_default_forecast_filter: 1, forecast_field: "date_field", }, mockRPC(_, args) { if (args.method === "web_read_group") { const { domain } = args.kwargs; assert.deepEqual(domain, expectedDomains.shift()); } }, }); await toggleSearchBarMenu(target); await toggleMenuItem(target, "Bar"); await toggleMenuItem(target, "Date Field"); await toggleMenuItemOption(target, "Date Field", "Quarter"); await toggleMenuItemOption(target, "Date Field", "Year"); await toggleMenuItem(target, "Forecast Filter"); unpatchDate(); }); QUnit.test( "forecast filter domain is combined with other domains following the same rules as other filters (OR in same group, AND between groups)", async function (assert) { assert.expect(1); const unpatchDate = patchDate(2021, 8, 16, 16, 54, 0); serverData.views["foo,false,search"] = ` `; await makeView({ resModel: "foo", type: "graph", serverData, searchViewId: false, context: { search_default_same_group_filter: 1, search_default_forecast_filter: 1, search_default_other_group_filter: 1, forecast_field: "date_field", }, mockRPC(_, args) { if (args.method === "web_read_group") { const { domain } = args.kwargs; assert.deepEqual(domain, [ "&", ["number", ">", 2], "|", ["bar", "=", 2], "&", ["value", ">", 0.0], "|", ["date_field", "=", false], ["date_field", ">=", "2021-09-01"], ]); } }, }); unpatchDate(); } ); });