Files
enterprise-addons/test_mail_enterprise/static/tests/attachment_preview.test.js
T

237 lines
9.1 KiB
JavaScript

import {
click,
contains,
dragenterFiles,
dropFiles,
inputFiles,
listenStoreFetch,
openFormView,
patchUiSize,
registerArchs,
SIZES,
start,
startServer,
waitStoreFetch,
} from "@mail/../tests/mail_test_helpers";
import { describe, test } from "@odoo/hoot";
import { defineTestMailModels } from "@test_mail/../tests/test_mail_test_helpers";
import { asyncStep, onRpc, waitForSteps } from "@web/../tests/web_test_helpers";
import { browser } from "@web/core/browser/browser";
describe.current.tags("desktop");
defineTestMailModels();
test("Should not have attachment preview for still uploading attachment", async () => {
const pyEnv = await startServer();
const recordId = pyEnv["mail.test.simple.main.attachment"].create({});
patchUiSize({ size: SIZES.XXL });
registerArchs({
"mail.test.simple.main.attachment,false,form": `
<form string="Test document">
<sheet>
<field name="name"/>
</sheet>
<div class="o_attachment_preview"/>
<chatter reload_on_attachment="True" open_attachments="True"/>
</form>`,
});
let shouldBlockAttachmentUpload = false;
onRpc("/mail/attachment/upload", () => {
if (shouldBlockAttachmentUpload) {
return new Promise(() => {});
}
});
await start();
await openFormView("mail.test.simple.main.attachment", recordId);
await contains("button[aria-label='Attach files']:enabled");
const files = [new File([new Uint8Array(1)], "invoice.pdf", { type: "application/pdf" })];
await dragenterFiles(".o-mail-Chatter", files);
await dropFiles(".o-Dropzone", files);
await contains("iframe[data-src*='/web/static/lib/pdfjs/web/viewer.html']");
await click(
".o-mail-AttachmentContainer:not(.o-isUploading):contains(invoice.pdf) .o-mail-Attachment-unlink"
);
await click(".modal button", { text: "Ok" });
await contains("iframe[data-src*='/web/static/lib/pdfjs/web/viewer.html']", { count: 0 });
shouldBlockAttachmentUpload = true;
await dragenterFiles(".o-mail-Chatter", files);
await dropFiles(".o-Dropzone", files);
await contains(".o-Dropzone", { count: 0 });
await contains(".o-mail-Attachment", { count: 0 });
await contains("iframe[data-src*='/web/static/lib/pdfjs/web/viewer.html']", { count: 0 });
});
test("Attachment on side", async () => {
const pyEnv = await startServer();
const recordId = pyEnv["mail.test.simple.main.attachment"].create({});
const file = new File([new Uint8Array(1)], "invoice.pdf", { type: "application/pdf" });
const attachmentId = pyEnv["ir.attachment"].create({
mimetype: "image/jpeg",
res_id: recordId,
res_model: "mail.test.simple.main.attachment",
});
pyEnv["mail.message"].create({
attachment_ids: [attachmentId],
model: "mail.test.simple.main.attachment",
res_id: recordId,
});
registerArchs({
"mail.test.simple.main.attachment,false,form": `
<form string="Test document">
<sheet>
<field name="name"/>
</sheet>
<div class="o_attachment_preview"/>
<chatter/>
</form>`,
});
patchUiSize({ size: SIZES.XXL });
onRpc("ir.attachment", "register_as_main_attachment", () =>
asyncStep("register_as_main_attachment")
);
listenStoreFetch("mail.thread");
await start();
await openFormView("mail.test.simple.main.attachment", recordId);
await contains(".o-mail-Attachment-imgContainer > img");
await contains(".o_form_sheet_bg > .o-mail-Form-chatter");
await contains(".o-mail-Form-chatter:not(.o-aside)");
await contains(".o_form_sheet_bg + .o_attachment_preview");
// Don't display arrow if there is no previous/next element
await contains(".arrow", { count: 0 });
// send a message with attached PDF file
await click("button", { text: "Send message" });
await waitStoreFetch("mail.thread", { stepsAfter: ["register_as_main_attachment"] });
await inputFiles(".o-mail-Composer .o_input_file", [file]);
await click(".o-mail-Composer-send:enabled");
await contains(".arrow", { count: 2 });
await waitStoreFetch("mail.thread");
await click(".o_move_next");
await contains(".o-mail-Attachment-imgContainer > img", { count: 0 });
await contains(".o-mail-Attachment > iframe");
await waitForSteps(["register_as_main_attachment"]);
await click(".o_move_previous");
await contains(".o-mail-Attachment-imgContainer > img");
await waitForSteps(["register_as_main_attachment"]);
});
test("After switching record with the form pager, when using the attachment preview navigation, the attachment should be switched", async () => {
const pyEnv = await startServer();
const recordId_1 = pyEnv["mail.test.simple.main.attachment"].create({
display_name: "first partner",
message_attachment_count: 2,
});
const attachmentId_1 = pyEnv["ir.attachment"].create({
mimetype: "image/jpeg",
res_id: recordId_1,
res_model: "mail.test.simple.main.attachment",
});
pyEnv["mail.message"].create({
attachment_ids: [attachmentId_1],
model: "mail.test.simple.main.attachment",
res_id: recordId_1,
});
const attachmentId_2 = pyEnv["ir.attachment"].create({
mimetype: "application/pdf",
res_id: recordId_1,
res_model: "mail.test.simple.main.attachment",
});
pyEnv["mail.message"].create({
attachment_ids: [attachmentId_2],
model: "mail.test.simple.main.attachment",
res_id: recordId_1,
});
const recordId_2 = pyEnv["mail.test.simple.main.attachment"].create({
display_name: "second partner",
message_attachment_count: 0,
});
registerArchs({
"mail.test.simple.main.attachment,false,form": `
<form string="Test document">
<sheet>
<field name="name"/>
</sheet>
<div class="o_attachment_preview"/>
<chatter/>
</form>`,
});
patchUiSize({ size: SIZES.XXL });
await start();
await openFormView("mail.test.simple.main.attachment", recordId_1, {
resIds: [recordId_1, recordId_2],
});
await contains(".o_pager_counter", { text: "1 / 2" });
await contains(".arrow", { count: 2 });
await click(".o_pager_next");
await contains(".o_pager_counter", { text: "2 / 2" });
await contains(".arrow", { count: 0 });
await click(".o_pager_previous");
await contains(".o_pager_counter", { text: "1 / 2" });
await contains(".arrow", { count: 2 });
await contains(".o-mail-Message", { count: 2 });
await click(".o-mail-Attachment .o_move_next");
await contains(".o-mail-Attachment-imgContainer img");
await click(".o-mail-Attachment .o_move_previous");
await contains(".o-mail-Attachment iframe");
});
test("Attachment on side on new record", async () => {
const pyEnv = await startServer();
const record = pyEnv["mail.test.simple.main.attachment"].create({});
pyEnv["ir.attachment"].create({
mimetype: "image/jpeg",
res_id: record,
res_model: "mail.test.simple.main.attachment",
});
registerArchs({
"mail.test.simple.main.attachment,false,form": `
<form string="Test document">
<sheet>
<field name="name"/>
</sheet>
<div class="o_attachment_preview"/>
<chatter/>
</form>`,
});
patchUiSize({ size: SIZES.XXL });
await start();
await openFormView("mail.test.simple.main.attachment", record);
await contains(".o_attachment_preview");
await openFormView("mail.test.simple.main.attachment");
await contains(".o_form_sheet_bg + .o-mail-Form-chatter");
await contains(".o_attachment_preview", { count: 0 });
});
test("Attachment on side not displayed on smaller screens", async () => {
const pyEnv = await startServer();
const recordId = pyEnv["mail.test.simple.main.attachment"].create({});
const attachmentId = pyEnv["ir.attachment"].create({
mimetype: "image/jpeg",
res_id: recordId,
res_model: "mail.test.simple.main.attachment",
});
pyEnv["mail.message"].create({
attachment_ids: [attachmentId],
model: "mail.test.simple.main.attachment",
res_id: recordId,
});
registerArchs({
"mail.test.simple.main.attachment,false,form": `
<form string="Test document">
<sheet>
<field name="name"/>
</sheet>
<div class="o_attachment_preview"/>
<chatter/>
</form>`,
});
patchUiSize({ size: SIZES.XXL });
await start();
await openFormView("mail.test.simple.main.attachment", recordId);
await contains(".o_form_sheet_bg + .o-mail-Form-chatter");
await contains(".o_attachment_preview");
patchUiSize({ size: SIZES.XL });
browser.dispatchEvent(new Event("resize"));
await contains(".o_attachment_preview", { count: 0 });
});