import { defineMailModels } from "@mail/../tests/mail_test_helpers";
import { expect, test } from "@odoo/hoot";
import { mockDate } from "@odoo/hoot-mock";
import {
defineModels,
fields,
models,
mountView,
onRpc,
toggleMenuItem,
toggleMenuItemOption,
toggleSearchBarMenu,
} from "@web/../tests/web_test_helpers";
class Foo extends models.Model {
date_field = fields.Date({ store: true, sortable: true });
bar = fields.Many2one({ store: true, relation: "partner", sortable: true });
value = fields.Float({ store: true, sortable: true });
number = fields.Integer({ store: true, sortable: true });
_views = {
"graph,1": ``,
};
}
class Partner extends models.Model {}
defineModels([Foo, Partner]);
defineMailModels();
const forecastDomain = (forecastStart) => [
"|",
["date_field", "=", false],
["date_field", ">=", forecastStart],
];
test("Forecast graph view", async () => {
expect.assertions(5);
mockDate("2021-09-16 16:54:00");
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
[],
];
onRpc("formatted_read_group", ({ kwargs }) => {
expect(kwargs.domain).toEqual(expectedDomains.shift());
});
await mountView({
resModel: "foo",
viewId: 1,
type: "graph",
searchViewArch: `
`,
context: {
search_default_forecast_filter: 1,
forecast_field: "date_field",
},
});
await toggleSearchBarMenu();
await toggleMenuItem("Bar");
await toggleMenuItem("Date Field");
await toggleMenuItemOption("Date Field", "Quarter");
await toggleMenuItemOption("Date Field", "Year");
await toggleMenuItem("Forecast Filter");
});
test("forecast filter domain is combined with other domains following the same rules as other filters (OR in same group, AND between groups)", async () => {
expect.assertions(1);
mockDate("2021-09-16 16:54:00");
onRpc("formatted_read_group", ({ kwargs }) => {
expect(kwargs.domain).toEqual([
"&",
["number", ">", 2],
"|",
["bar", "=", 2],
"&",
["value", ">", 0.0],
"|",
["date_field", "=", false],
["date_field", ">=", "2021-09-01"],
]);
});
await mountView({
resModel: "foo",
type: "graph",
viewId: 1,
searchViewArch: `
`,
context: {
search_default_same_group_filter: 1,
search_default_forecast_filter: 1,
search_default_other_group_filter: 1,
forecast_field: "date_field",
},
});
});