123 lines
4.6 KiB
JavaScript
123 lines
4.6 KiB
JavaScript
|
/** @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");
|
||
|
});
|
||
|
});
|