Files
Odoo-Modules/Fusion Accounting/static/tests/move_line.test.js
2026-02-22 01:22:18 -05:00

341 lines
13 KiB
JavaScript

import { beforeEach, test } from "@odoo/hoot";
import { defineAccountModels } from "@account/../tests/account_test_helpers";
import {
assertSteps,
click,
contains,
onRpcBefore,
openListView,
patchUiSize,
SIZES,
start,
startServer,
step,
} from "@mail/../tests/mail_test_helpers";
import { onRpc, serverState } from "@web/../tests/web_test_helpers";
import { getOrigin } from "@web/core/utils/urls";
const ROUTES_TO_IGNORE = [
"/bus/im_status",
"/web/dataset/call_kw/account.move.line/get_views",
"/web/webclient/load_menus",
"/web/dataset/call_kw/res.users/load_views",
"/hr_attendance/attendance_user_data",
"/web/dataset/call_kw/res.users/has_group",
];
const openPreparedView = async (size) => {
patchUiSize({ size: size });
onRpcBefore((route, args) => {
if (
ROUTES_TO_IGNORE.includes(route) ||
route.includes("/web/static/lib/pdfjs/web/viewer.html")
) {
return;
}
step(`${route} - ${JSON.stringify(args)}`);
});
onRpc(({ method, model, args, kwargs }) => {
const route = `/web/dataset/call_kw/${model}/${method}`;
if (ROUTES_TO_IGNORE.includes(route)) {
return;
}
step(`${route} - {"kwargs":${JSON.stringify(kwargs)}}`);
});
await start();
await assertSteps([
`/mail/data - ${JSON.stringify({
init_messaging: {},
failures: true,
systray_get_activities: true,
context: { lang: "en", tz: "taht", uid: serverState.userId, allowed_company_ids: [1] },
})}`,
]);
await openListView("account.move.line", {
context: { group_by: ["move_id"] },
arch: `
<list editable='bottom' js_class='account_move_line_list'>
<field name='id'/>
<field name='name'/>
<field name='move_id'/>
</list>`,
});
};
defineAccountModels();
beforeEach(async () => {
const pyEnv = await startServer();
const accountMoveLineIds = pyEnv["account.move.line"].create([
{ name: "line0" },
{ name: "line1" },
{ name: "line2" },
{ name: "line3" },
{ name: "line4" },
{ name: "line5" },
]);
const accountMove = pyEnv["account.move"].create([
{ name: "move0", invoice_line_ids: [accountMoveLineIds[0], accountMoveLineIds[1]] },
{ name: "move1", invoice_line_ids: [accountMoveLineIds[2], accountMoveLineIds[3]] },
{ name: "move2", invoice_line_ids: [accountMoveLineIds[4], accountMoveLineIds[5]] },
]);
const attachmentIds = pyEnv["ir.attachment"].create([
{ res_id: accountMove[1], res_model: "account.move", mimetype: "application/pdf" },
{ res_id: accountMove[2], res_model: "account.move", mimetype: "application/pdf" },
]);
pyEnv["account.move"].write([accountMove[1]], { attachment_ids: [attachmentIds[0]] });
pyEnv["account.move.line"].write([accountMoveLineIds[0]], { move_id: accountMove[0] });
pyEnv["account.move.line"].write([accountMoveLineIds[1]], { move_id: accountMove[0] });
pyEnv["account.move.line"].write([accountMoveLineIds[2]], {
move_id: accountMove[1],
move_attachment_ids: [attachmentIds[0]],
});
pyEnv["account.move.line"].write([accountMoveLineIds[3]], {
move_id: accountMove[1],
move_attachment_ids: [attachmentIds[0]],
});
pyEnv["account.move.line"].write([accountMoveLineIds[4]], {
move_id: accountMove[2],
move_attachment_ids: [attachmentIds[1]],
});
pyEnv["account.move.line"].write([accountMoveLineIds[5]], {
move_id: accountMove[2],
move_attachment_ids: [attachmentIds[1]],
});
});
test("No preview on small devices", async () => {
await openPreparedView(SIZES.XL);
await contains(".o_move_line_list_view");
await assertSteps([
`/web/dataset/call_kw/account.move.line/web_read_group - ${JSON.stringify({
kwargs: {
orderby: "",
lazy: true,
offset: 0,
limit: 80,
context: {
lang: "en",
tz: "taht",
uid: serverState.userId,
allowed_company_ids: [1],
group_by: ["move_id"],
},
groupby: ["move_id"],
domain: [],
fields: ["id:sum"],
},
})}`,
]);
// weak test, no guarantee to wait long enough for the potential attachment preview to show
await contains(".o_attachment_preview", { count: 0 }); // The preview component shouldn't be mounted for small screens
await click(":nth-child(1 of .o_group_header)");
await contains(".o_data_row", { count: 2 });
await assertSteps([
`/web/dataset/call_kw/account.move.line/web_search_read - ${JSON.stringify({
kwargs: {
specification: {
id: {},
name: {},
move_id: { fields: { display_name: {} } },
move_attachment_ids: { fields: { mimetype: {} } },
},
offset: 0,
order: "",
limit: 80,
context: {
lang: "en",
tz: "taht",
uid: serverState.userId,
allowed_company_ids: [1],
bin_size: true,
group_by: ["move_id"],
default_move_id: 1,
},
count_limit: 10001,
domain: [["move_id", "=", 1]],
},
})}`,
]);
await click(":nth-child(1 of .o_data_row) :nth-child(2 of .o_data_cell)");
await contains(":nth-child(1 of .o_data_row) :nth-child(2 of .o_data_cell) input");
// weak test, no guarantee to wait long enough for the potential attachment preview to show
await contains(".o_attachment_preview", { count: 0 }); // The preview component shouldn't be mounted for small screens even when clicking on a line without attachment
await click(":nth-child(2 of .o_group_header)");
await contains(".o_data_row", { count: 4 });
await assertSteps([
`/web/dataset/call_kw/account.move.line/web_search_read - ${JSON.stringify({
kwargs: {
specification: {
id: {},
name: {},
move_id: { fields: { display_name: {} } },
move_attachment_ids: { fields: { mimetype: {} } },
},
offset: 0,
order: "",
limit: 80,
context: {
lang: "en",
tz: "taht",
uid: serverState.userId,
allowed_company_ids: [1],
bin_size: true,
group_by: ["move_id"],
default_move_id: 2,
},
count_limit: 10001,
domain: [["move_id", "=", 2]],
},
})}`,
]);
await click(":nth-child(4 of .o_data_row) :nth-child(2 of .o_data_cell)");
await contains(":nth-child(4 of .o_data_row) :nth-child(2 of .o_data_cell) input");
// weak test, no guarantee to wait long enough for the potential attachment preview to show
await contains(".o_attachment_preview", { count: 0 }); // The preview component shouldn't be mounted for small screens even when clicking on a line with attachment
await assertSteps([], "no extra rpc should be done");
});
test("Fetch and preview of attachments on big devices", async () => {
await openPreparedView(SIZES.XXL);
await contains(".o_move_line_list_view");
await assertSteps([
`/web/dataset/call_kw/account.move.line/web_read_group - ${JSON.stringify({
kwargs: {
orderby: "",
lazy: true,
offset: 0,
limit: 80,
context: {
lang: "en",
tz: "taht",
uid: serverState.userId,
allowed_company_ids: [1],
group_by: ["move_id"],
},
groupby: ["move_id"],
domain: [],
fields: ["id:sum"],
},
})}`,
]);
await contains(".o_attachment_preview");
await contains(".o_attachment_preview p", {
text: "Choose a line to preview its attachments.",
});
await contains(".o_attachment_preview iframe", { count: 0 });
await click(":nth-child(1 of .o_group_header)");
await contains(".o_data_row", { count: 2 });
await assertSteps([
`/web/dataset/call_kw/account.move.line/web_search_read - ${JSON.stringify({
kwargs: {
specification: {
id: {},
name: {},
move_id: { fields: { display_name: {} } },
move_attachment_ids: { fields: { mimetype: {} } },
},
offset: 0,
order: "",
limit: 80,
context: {
lang: "en",
tz: "taht",
uid: serverState.userId,
allowed_company_ids: [1],
bin_size: true,
group_by: ["move_id"],
default_move_id: 1,
},
count_limit: 10001,
domain: [["move_id", "=", 1]],
},
})}`,
]);
await click(":nth-child(1 of .o_data_row) :nth-child(2 of .o_data_cell)");
await contains(".o_attachment_preview iframe", { count: 0 });
await contains(".o_attachment_preview p", { text: "No attachments linked." });
await click(":nth-child(2 of .o_group_header)");
await contains(".o_data_row", { count: 4 });
await contains(".o_attachment_preview p", { text: "No attachments linked." });
await assertSteps([
`/web/dataset/call_kw/account.move.line/web_search_read - ${JSON.stringify({
kwargs: {
specification: {
id: {},
name: {},
move_id: { fields: { display_name: {} } },
move_attachment_ids: { fields: { mimetype: {} } },
},
offset: 0,
order: "",
limit: 80,
context: {
lang: "en",
tz: "taht",
uid: serverState.userId,
allowed_company_ids: [1],
bin_size: true,
group_by: ["move_id"],
default_move_id: 2,
},
count_limit: 10001,
domain: [["move_id", "=", 2]],
},
})}`,
]);
await click(":nth-child(4 of .o_data_row) :nth-child(2 of .o_data_cell)");
await contains(".o_attachment_preview p", { count: 0 });
await contains(
`.o_attachment_preview iframe[data-src='/web/static/lib/pdfjs/web/viewer.html?file=${encodeURIComponent(
getOrigin() + "/web/content/1"
)}#pagemode=none']`
);
await assertSteps([], "no extra rpc should be done");
await click(":nth-child(3 of .o_group_header)");
await contains(".o_data_row", { count: 6 });
// weak test, no guarantee to wait long enough for the potential attachment to change
await contains(
`.o_attachment_preview iframe[data-src='/web/static/lib/pdfjs/web/viewer.html?file=${encodeURIComponent(
getOrigin() + "/web/content/1"
)}#pagemode=none']`
); // The previewer content shouldn't change without clicking on another line from another account.move
await assertSteps([
`/web/dataset/call_kw/account.move.line/web_search_read - ${JSON.stringify({
kwargs: {
specification: {
id: {},
name: {},
move_id: { fields: { display_name: {} } },
move_attachment_ids: { fields: { mimetype: {} } },
},
offset: 0,
order: "",
limit: 80,
context: {
lang: "en",
tz: "taht",
uid: serverState.userId,
allowed_company_ids: [1],
bin_size: true,
group_by: ["move_id"],
default_move_id: 3,
},
count_limit: 10001,
domain: [["move_id", "=", 3]],
},
})}`,
]);
await click(":nth-child(5 of .o_data_row) :nth-child(2 of .o_data_cell)");
await contains(":nth-child(5 of .o_data_row) :nth-child(2 of .o_data_cell) input");
await contains(
`.o_attachment_preview iframe[data-src='/web/static/lib/pdfjs/web/viewer.html?file=${encodeURIComponent(
getOrigin() + "/web/content/2"
)}#pagemode=none']`
);
await assertSteps([]);
await click(":nth-child(1 of .o_data_row) :nth-child(2 of .o_data_cell)");
await contains(".o_attachment_preview iframe", { count: 0 });
await contains(".o_attachment_preview p");
await assertSteps([]);
});