Odoo18-Base/addons/web/static/tests/views/fields/pdf_viewer_field.test.js
2025-01-06 10:57:38 +07:00

79 lines
2.4 KiB
JavaScript

import {
clickSave,
defineModels,
fields,
models,
mountView,
onRpc,
} from "@web/../tests/web_test_helpers";
import { test, expect } from "@odoo/hoot";
import { click, setInputFiles, queryOne, waitFor } from "@odoo/hoot-dom";
const getIframeSrc = () => queryOne(".o_field_widget iframe.o_pdfview_iframe").dataset.src;
const getIframeProtocol = () => getIframeSrc().match(/\?file=(\w+)%3A/)[1];
const getIframeViewerParams = () =>
decodeURIComponent(getIframeSrc().match(/%2Fweb%2Fcontent%3F(.*)#page/)[1]);
class Partner extends models.Model {
document = fields.Binary({ string: "Binary" });
_records = [
{
document: "coucou==\n",
},
];
}
defineModels([Partner]);
test("PdfViewerField without data", async () => {
await mountView({
type: "form",
resModel: "partner",
arch: '<form><field name="document" widget="pdf_viewer"/></form>',
});
expect(".o_field_widget").toHaveClass("o_field_pdf_viewer");
expect(".o_select_file_button:not(.o_hidden)").toHaveCount(1);
expect(".o_pdfview_iframe").toHaveCount(0);
expect(`input[type="file"]`).toHaveCount(1);
});
test("PdfViewerField: basic rendering", async () => {
await mountView({
type: "form",
resModel: "partner",
resId: 1,
arch: '<form><field name="document" widget="pdf_viewer"/></form>',
});
expect(".o_field_widget").toHaveClass("o_field_pdf_viewer");
expect(".o_select_file_button").toHaveCount(1);
expect(".o_field_widget iframe.o_pdfview_iframe").toHaveCount(1);
expect(getIframeProtocol()).toBe("https");
expect(getIframeViewerParams()).toBe("model=partner&field=document&id=1");
});
test("PdfViewerField: upload rendering", async () => {
expect.assertions(4);
onRpc("web_save", ({ args }) => {
expect(args[1]).toEqual({ document: btoa("test") });
});
await mountView({
type: "form",
resModel: "partner",
arch: '<form><field name="document" widget="pdf_viewer"/></form>',
});
expect("iframe.o_pdfview_iframe").toHaveCount(0);
const file = new File(["test"], "test.pdf", { type: "application/pdf" });
await click(".o_field_pdf_viewer input[type=file]");
await setInputFiles(file);
await waitFor("iframe.o_pdfview_iframe");
expect(getIframeProtocol()).toBe("blob");
await clickSave();
expect(getIframeProtocol()).toBe("blob");
});