Files
enterprise-addons/documents/static/tests/error_dialog_patch.test.js
T

169 lines
5.4 KiB
JavaScript

import { expect, test } from "@odoo/hoot";
import { animationFrame, runAllTimers } from "@odoo/hoot-mock";
import { EventBus } from "@odoo/owl";
import {
contains,
defineModels,
makeServerError,
mockService,
mountWithCleanup,
patchWithCleanup,
} from "@web/../tests/web_test_helpers";
import { browser } from "@web/core/browser/browser";
import { MainComponentsContainer } from "@web/core/main_components_container";
import { user } from "@web/core/user";
import { DocumentsModels } from "@documents/../tests/helpers/data";
defineModels(DocumentsModels);
test("Shareable error dialog", async () => {
expect.errors(1);
const _bus = new EventBus();
patchWithCleanup(browser.navigator.clipboard, {
async writeText(text) {
expect.step(text);
},
});
mockService("notification", {
add: (message, options) => {
expect(message).toBe("The document URL has been copied to your clipboard.");
expect(options).toEqual({ type: "success" });
expect.step("Success notification");
},
});
mockService("file_upload", {
bus: _bus,
upload: (route) => {
if (route === "/documents/upload_traceback") {
_bus.trigger("FILE_UPLOAD_LOADED", {
upload: {
data: new FormData(),
xhr: { status: 200, response: '["test url"]' },
},
});
expect.step("Upload traceback");
}
},
});
const error = makeServerError({
subType: "Odoo Client Error",
message: "Message",
errorName: "client error",
});
await mountWithCleanup(MainComponentsContainer);
Promise.reject(error);
await animationFrame();
expect.verifyErrors(["Message"]);
expect(".modal-footer button:contains(Close)").toHaveCount(1);
expect(".modal-footer button:contains(Share)").toHaveCount(1);
expect(".modal-footer button:contains(Share)").toBeEnabled();
await contains(".modal-footer button:contains(Share)").click();
expect(".modal-footer button:contains(Share)").not.toBeEnabled();
await animationFrame();
expect.verifySteps(["Upload traceback", "test url", "Success notification"]);
expect(".modal-footer .o_field_CopyClipboardChar").toHaveCount(1);
expect(".modal-footer .o_field_CopyClipboardChar").toHaveText("test url");
await contains(".o_clipboard_button").click();
await animationFrame();
expect.verifySteps(["test url"]);
});
test("Error dialog is not shareable for portal user", async () => {
expect.errors(1);
patchWithCleanup(user, {
hasGroup: () => false,
});
const error = makeServerError({
subType: "Odoo Client Error",
message: "Message",
errorName: "client error",
});
await mountWithCleanup(MainComponentsContainer);
Promise.reject(error);
await animationFrame();
expect.verifyErrors(["Message"]);
expect(".modal-footer button:contains(Close)").toHaveCount(1);
expect(".modal-footer button:contains(Share)").toHaveCount(0);
});
test("Multiple error dialogs", async () => {
expect.errors(3);
const _bus = new EventBus();
patchWithCleanup(browser.navigator.clipboard, {
async writeText(text) {
expect.step(text);
},
});
mockService("notification", {
add: (message, options) => {
expect(message).toBe("The document URL has been copied to your clipboard.");
expect(options).toEqual({ type: "success" });
expect.step("Success notification");
},
});
mockService("file_upload", {
bus: _bus,
upload: (route) => {
if (route === "/documents/upload_traceback") {
_bus.trigger("FILE_UPLOAD_LOADED", {
upload: {
data: new FormData(),
xhr: { status: 200, response: '["test url"]' },
},
});
expect.step("Upload traceback");
}
},
});
const error1 = makeServerError({
subType: "Odoo Client Error",
message: "Message 1",
errorName: "client error",
});
const error2 = makeServerError({
subType: "Odoo Client Error",
message: "Message 2",
errorName: "client error",
});
const error3 = makeServerError({
subType: "Odoo Client Error",
message: "Message 3",
errorName: "client error",
});
await mountWithCleanup(MainComponentsContainer);
Promise.reject(error1);
await runAllTimers();
await animationFrame();
expect.verifyErrors(["Message 1"]);
Promise.reject(error2);
await runAllTimers();
await animationFrame();
expect.verifyErrors(["Message 2"]);
Promise.reject(error3);
await runAllTimers();
await animationFrame();
expect.verifyErrors(["Message 3"]);
await contains(".modal-footer button:contains(Share):eq(2)").click();
expect(".modal-footer button:contains(Share):eq(2)").not.toBeEnabled();
await animationFrame();
expect.verifySteps(["Upload traceback", "test url", "Success notification"]);
expect(".modal-footer .o_field_CopyClipboardChar").toHaveCount(1);
expect(".modal-footer .o_field_CopyClipboardChar").toHaveText("test url");
await contains(".o_clipboard_button").click();
await animationFrame();
expect.verifySteps(["test url"]);
});