Odoo18-Base/addons/web/static/tests/helpers/legacy_env_utils.js
2025-03-10 11:12:23 +07:00

66 lines
2.2 KiB
JavaScript

/** @odoo-module */
import { registry } from "@web/core/registry";
import { uiService } from "@web/core/ui/ui_service";
import { patch, unpatch } from "@web/core/utils/patch";
import { makeLegacyDialogMappingService } from "@web/legacy/utils";
import { hotkeyService } from "@web/core/hotkeys/hotkey_service";
import core from "web.core";
import makeTestEnvironment from "web.test_env";
import { registerCleanup } from "./cleanup";
import { makeTestEnv } from "./mock_env";
import { patchWithCleanup } from "./utils";
import * as FavoriteMenu from "web.FavoriteMenu";
import * as CustomFavoriteItem from "web.CustomFavoriteItem";
const serviceRegistry = registry.category("services");
export async function makeLegacyDialogMappingTestEnv() {
const coreBusListeners = [];
patch(core.bus, "legacy.core.bus.listeners", {
on(eventName, thisArg, callback) {
this._super(...arguments);
coreBusListeners.push({ eventName, callback });
},
});
const legacyEnv = makeTestEnvironment({ bus: core.bus });
serviceRegistry.add("ui", uiService);
serviceRegistry.add("hotkey", hotkeyService);
serviceRegistry.add("legacy_dialog_mapping", makeLegacyDialogMappingService(legacyEnv));
const env = await makeTestEnv();
legacyEnv.services.hotkey = env.services.hotkey;
legacyEnv.services.ui = env.services.ui;
registerCleanup(() => {
for (const listener of coreBusListeners) {
core.bus.off(listener.eventName, listener.callback);
}
unpatch(core.bus, "legacy.core.bus.listeners");
});
return {
legacyEnv,
env,
};
}
function clearLegacyRegistryWithCleanup(r) {
const patch = {
// To improve? Initial data in registry is ignored.
map: Object.create(null),
// Preserve onAdd listeners
listeners: [...r.listeners],
_scoreMapping: Object.create(null),
_sortedKeys: null,
};
patchWithCleanup(r, patch);
}
export function prepareLegacyRegistriesWithCleanup() {
// Clear FavoriteMenu registry and add the "Save favorite" item.
clearLegacyRegistryWithCleanup(FavoriteMenu.registry);
FavoriteMenu.registry.add("favorite-generator-menu", CustomFavoriteItem, 0);
}