base_automation/static/tests/base_automation_error_dialog.js

123 lines
4.6 KiB
JavaScript
Raw Permalink Normal View History

/** @odoo-modules */
import { registerCleanup } from "@web/../tests/helpers/cleanup";
import { makeTestEnv } from "@web/../tests/helpers/mock_env";
import { makeServerError } from "@web/../tests/helpers/mock_server";
import {
makeFakeLocalizationService,
makeFakeRPCService,
} from "@web/../tests/helpers/mock_services";
import { browser } from "@web/core/browser/browser";
import { dialogService } from "@web/core/dialog/dialog_service";
import { errorService } from "@web/core/errors/error_service";
import { hotkeyService } from "@web/core/hotkeys/hotkey_service";
import { MainComponentsContainer } from "@web/core/main_components_container";
import { notificationService } from "@web/core/notifications/notification_service";
import { registry } from "@web/core/registry";
import { uiService } from "@web/core/ui/ui_service";
import { getFixture, mount, nextTick, patchWithCleanup } from "@web/../tests/helpers/utils";
import { BaseAutomationErrorDialog } from "@base_automation/base_automation_error_dialog";
import { toRaw } from "@odoo/owl";
const serviceRegistry = registry.category("services");
let target;
QUnit.module("base_automation", {}, function () {
let unhandledRejectionCb;
QUnit.module("Error Dialog", {
async beforeEach() {
serviceRegistry.add("dialog", dialogService);
serviceRegistry.add("ui", uiService);
serviceRegistry.add("error", errorService);
serviceRegistry.add("hotkey", hotkeyService);
serviceRegistry.add("localization", makeFakeLocalizationService());
serviceRegistry.add("action", { start: () => {} });
serviceRegistry.add("orm", { start: () => {} });
serviceRegistry.add("user", { start: () => ({ isAdmin: true }) });
registry.category("error_dialogs").add("base_automation", BaseAutomationErrorDialog);
// Both of these are unused but required for the error service to call error handlers
serviceRegistry.add("notification", notificationService);
serviceRegistry.add("rpc", makeFakeRPCService());
const windowAddEventListener = browser.addEventListener;
browser.addEventListener = (type, cb) => {
if (type === "unhandledrejection") {
unhandledRejectionCb = cb;
}
};
registerCleanup(() => {
browser.addEventListener = windowAddEventListener;
});
target = getFixture();
},
});
QUnit.test("Error due to an automation rule", async function (assert) {
assert.expect(4);
const errorContext = {
exception_class: "base_automation",
base_automation: {
id: 1,
name: "Test base automation error dialog",
},
};
const error = makeServerError({
subType: "Odoo Client Error",
message: "Message",
context: errorContext,
});
patchWithCleanup(BaseAutomationErrorDialog.prototype, {
setup() {
assert.equal(
toRaw(this.props.data.context),
errorContext,
"Received the correct error context"
);
super.setup();
},
});
const env = await makeTestEnv();
await mount(MainComponentsContainer, target, { env });
const errorEvent = new PromiseRejectionEvent("error", {
reason: error,
promise: null,
cancelable: true,
bubbles: true,
});
await unhandledRejectionCb(errorEvent);
await nextTick();
assert.containsOnce(target, ".modal .fa-clipboard");
assert.containsOnce(target, ".modal .o_disable_action_button");
assert.containsOnce(target, ".modal .o_edit_action_button");
});
QUnit.test("Error not due to an automation rule", async function (assert) {
assert.expect(3);
const error = makeServerError({
subType: "Odoo Client Error",
message: "Message",
});
const env = await makeTestEnv();
await mount(MainComponentsContainer, target, { env });
const errorEvent = new PromiseRejectionEvent("error", {
reason: error,
promise: null,
cancelable: true,
bubbles: true,
});
await unhandledRejectionCb(errorEvent);
await nextTick();
assert.containsOnce(target, ".modal .fa-clipboard");
assert.containsNone(target, ".modal .o_disable_action_button");
assert.containsNone(target, ".modal .o_edit_action_button");
});
});