/** @odoo-module */
/** @odoo-module **/
import { browser } from "@web/core/browser/browser";
import { Domain } from "@web/core/domain";
import { click, getFixture, patchDate, patchWithCleanup } from "@web/../tests/helpers/utils";
import { makeView, setupViewRegistries } from "@web/../tests/views/helpers";
let serverData, target;
QUnit.module("Views", (hooks) => {
hooks.beforeEach(() => {
serverData = {
models: {
"analytic.line": {
fields: {
project_id: { string: "Project", type: "many2one", relation: "project" },
task_id: { string: "Task", type: "many2one", relation: "task" },
selection_field: {
string: "Selection Field",
type: "selection",
selection: [
["abc", "ABC"],
["def", "DEF"],
["ghi", "GHI"],
],
},
date: { string: "Date", type: "date" },
unit_amount: {
string: "Unit Amount",
type: "float",
group_operator: "sum",
},
},
records: [
{
id: 1,
project_id: 31,
selection_field: "abc",
date: "2017-01-24",
unit_amount: 2.5,
},
{
id: 2,
project_id: 31,
task_id: 1,
selection_field: "def",
date: "2017-01-25",
unit_amount: 2,
},
{
id: 3,
project_id: 31,
task_id: 1,
selection_field: "def",
date: "2017-01-25",
unit_amount: 5.5,
},
{
id: 4,
project_id: 31,
task_id: 1,
selection_field: "def",
date: "2017-01-30",
unit_amount: 10,
},
{
id: 5,
project_id: 142,
task_id: 12,
selection_field: "ghi",
date: "2017-01-31",
unit_amount: -3.5,
},
],
},
project: {
fields: {
name: { string: "Project Name", type: "char" },
},
records: [
{ id: 31, display_name: "P1" },
{ id: 142, display_name: "Webocalypse Now" },
],
},
task: {
fields: {
name: { string: "Task Name", type: "char" },
project_id: { string: "Project", type: "many2one", relation: "project" },
},
records: [
{ id: 1, display_name: "BS task", project_id: 31 },
{ id: 12, display_name: "Another BS task", project_id: 142 },
{ id: 54, display_name: "yet another task", project_id: 142 },
],
},
},
views: {
"analytic.line,false,form": `
`,
"analytic.line,false,list": `
`,
"analytic.line,false,grid": `
`,
"analytic.line,1,grid": `
`,
"analytic.line,false,search": `
`,
"task,false,form": ``,
"task,false,search": ``,
},
};
setupViewRegistries();
target = getFixture();
patchDate(2017, 0, 25, 0, 0, 0);
patchWithCleanup(browser, {
setTimeout: (fn) => fn(),
clearTimeout: () => {},
});
});
QUnit.module("GridView - Mobile");
QUnit.test("basic empty grid view in mobile", async function (assert) {
await makeView({
type: "grid",
resModel: "analytic.line",
serverData,
arch: `
`,
async mockRPC(route, args) {
if (args.method === "grid_unavailability") {
return {};
}
},
domain: Domain.FALSE.toList({}),
});
assert.containsOnce(target, ".o_grid_view");
assert.containsOnce(target, ".o_grid_renderer");
assert.containsOnce(target, ".o_control_panel_main_buttons .d-xl-none .o_grid_buttons");
assert.containsNone(target, ".o_grid_custom_buttons");
assert.containsOnce(target, ".o_grid_navigation_buttons");
assert.strictEqual(
target.querySelector(".o_grid_navigation_buttons button:first-child").textContent,
" Today ",
"The first navigation button should be the Today one."
);
assert.containsOnce(
target,
".o_grid_navigation_buttons > div > button > span.oi-arrow-left",
"The previous button should be there"
);
assert.containsOnce(
target,
".o_grid_navigation_buttons > div > button > span.oi-arrow-right",
"The previous button should be there"
);
assert.containsOnce(target, ".o_view_scale_selector");
assert.strictEqual(
target.querySelector(".o_view_scale_selector button.scale_button_selection")
.textContent,
"Day",
"The default active range should be the first one define in the grid view"
);
await click(target, ".scale_button_selection");
assert.containsOnce(
target,
".o_view_scale_selector .o_scale_button_day",
"The Day scale should be in the dropdown menu"
);
assert.containsOnce(
target,
".o_view_scale_selector .o_scale_button_week",
"The week scale should be in the dropdown menu"
);
assert.containsOnce(
target,
".o_view_scale_selector .o_scale_button_month",
"The month scale should be in the dropdown menu"
);
assert.containsOnce(
target,
".o_grid_column_title.o_grid_highlightable.fw-bolder",
"The column title containing the date should be the current date"
);
assert.strictEqual(
target.querySelector(".o_grid_column_title.o_grid_highlightable.fw-bolder")
.textContent,
"Wed,\nJan\u00A025",
"The current date should be Monday on 30 January 2023"
);
assert.containsOnce(
target,
".o_grid_column_title.o_grid_highlightable",
1,
"It should have 1 column"
);
assert.containsOnce(
target,
".o_grid_column_title.o_grid_row_total",
1,
"It should have 1 column for the total"
);
assert.containsOnce(target, ".o_grid_column_title.o_grid_row_total");
assert.strictEqual(
target.querySelector(".o_grid_column_title.o_grid_row_total").textContent,
serverData.models["analytic.line"].fields.unit_amount.string,
"The column title of row totals should be the string of the measure field"
);
assert.containsNone(
target,
".o_grid_add_line a",
"No Add a line button should be displayed when create_inline is false (default behavior)"
);
});
QUnit.test("grid view should open in day range for mobile", async function (assert) {
await makeView({
type: "grid",
resModel: "analytic.line",
serverData,
arch: `
`,
async mockRPC(route, args) {
if (args.method === "grid_unavailability") {
return {};
}
},
});
assert.containsOnce(target, ".o_view_scale_selector");
assert.strictEqual(
target.querySelector(".o_view_scale_selector button.scale_button_selection")
.textContent,
"Day",
"The default active range should be the first one define in the grid view"
);
});
});