Since the PR introducing the wowl environment in the discuss app, the model manager is not set in debug mode during tests. The debug mode is usefull since it adds integrity checks and more verbose error messages. This commit restores it. closes odoo/odoo#99556 Related: odoo/enterprise#31086 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
143 lines
5.6 KiB
JavaScript
143 lines
5.6 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { busService } from '@bus/services/bus_service';
|
|
import { multiTabService } from '@bus/multi_tab_service';
|
|
import { makeMultiTabToLegacyEnv } from '@bus/services/legacy/make_multi_tab_to_legacy_env';
|
|
import { makeBusServiceToLegacyEnv } from '@bus/services/legacy/make_bus_service_to_legacy_env';
|
|
import { makeFakePresenceService } from '@bus/../tests/helpers/mock_services';
|
|
|
|
import { ChatWindowManagerContainer } from '@mail/components/chat_window_manager_container/chat_window_manager_container';
|
|
import { DialogManagerContainer } from '@mail/components/dialog_manager_container/dialog_manager_container';
|
|
import { DiscussContainer } from '@mail/components/discuss_container/discuss_container';
|
|
import { PopoverManagerContainer } from '@mail/components/popover_manager_container/popover_manager_container';
|
|
import { messagingService } from '@mail/services/messaging_service';
|
|
import { systrayService } from '@mail/services/systray_service';
|
|
import { makeMessagingToLegacyEnv } from '@mail/utils/make_messaging_to_legacy_env';
|
|
|
|
import { registry } from '@web/core/registry';
|
|
import { patchWithCleanup } from "@web/../tests/helpers/utils";
|
|
import { createWebClient } from "@web/../tests/webclient/helpers";
|
|
|
|
const ROUTES_TO_IGNORE = [
|
|
'/web/webclient/load_menus',
|
|
'/web/dataset/call_kw/res.users/load_views',
|
|
'/web/dataset/call_kw/res.users/systray_get_activities'
|
|
];
|
|
const WEBCLIENT_PARAMETER_NAMES = new Set(['legacyParams', 'mockRPC', 'serverData', 'target', 'webClientClass']);
|
|
const SERVICES_PARAMETER_NAMES = new Set([
|
|
'legacyServices', 'loadingBaseDelayDuration', 'messagingBeforeCreationDeferred',
|
|
'messagingBus', 'services',
|
|
]);
|
|
|
|
/**
|
|
* Add required components to the main component registry.
|
|
*/
|
|
function setupMainComponentRegistry() {
|
|
const mainComponentRegistry = registry.category('main_components');
|
|
mainComponentRegistry.add('ChatWindowManagerContainer', { Component: ChatWindowManagerContainer });
|
|
mainComponentRegistry.add('DialogManagerContainer', { Component: DialogManagerContainer });
|
|
registry.category('actions').add('mail.action_discuss', DiscussContainer);
|
|
mainComponentRegistry.add('PopoverManagerContainer', { Component: PopoverManagerContainer });
|
|
}
|
|
|
|
/**
|
|
* Setup both legacy and new service registries.
|
|
*
|
|
* @param {Object} param0
|
|
* @param {Object} [param0.services]
|
|
* @param {number} [param0.loadingBaseDelayDuration=0]
|
|
* @param {Promise} [param0.messagingBeforeCreationDeferred=Promise.resolve()]
|
|
* Deferred that let tests block messaging creation and simulate resolution.
|
|
* Useful for testing components behavior when messaging is not yet created.
|
|
* @param {EventBus} [param0.messagingBus]
|
|
* @returns {LegacyRegistry} The registry containing all the legacy services that will be passed
|
|
* to the webClient as a legacy parameter.
|
|
*/
|
|
function setupMessagingServiceRegistries({
|
|
loadingBaseDelayDuration = 0,
|
|
messagingBeforeCreationDeferred = Promise.resolve(),
|
|
messagingBus,
|
|
services,
|
|
}) {
|
|
const serviceRegistry = registry.category('services');
|
|
|
|
patchWithCleanup(messagingService, {
|
|
async _startModelManager(modelManager, messagingValues) {
|
|
modelManager.isDebug = true;
|
|
const _super = this._super.bind(this);
|
|
await messagingBeforeCreationDeferred;
|
|
return _super(modelManager, messagingValues);
|
|
},
|
|
});
|
|
|
|
const messagingValues = {
|
|
start() {
|
|
return {
|
|
isInQUnitTest: true,
|
|
disableAnimation: true,
|
|
loadingBaseDelayDuration,
|
|
messagingBus,
|
|
userNotificationManager: { canPlayAudio: false },
|
|
};
|
|
}
|
|
};
|
|
|
|
services = {
|
|
bus_service: busService,
|
|
messaging: messagingService,
|
|
messagingValues,
|
|
presence: makeFakePresenceService({
|
|
isOdooFocused: () => true,
|
|
}),
|
|
systrayService,
|
|
multi_tab: multiTabService,
|
|
...services,
|
|
};
|
|
|
|
Object.entries(services).forEach(([serviceName, service]) => {
|
|
serviceRegistry.add(serviceName, service);
|
|
});
|
|
|
|
registry.category('wowlToLegacyServiceMappers').add('bus_service_to_legacy_env', makeBusServiceToLegacyEnv);
|
|
registry.category('wowlToLegacyServiceMappers').add('multi_tab_to_legacy_env', makeMultiTabToLegacyEnv);
|
|
registry.category('wowlToLegacyServiceMappers').add('messaging_service_to_legacy_env', makeMessagingToLegacyEnv);
|
|
}
|
|
|
|
/**
|
|
* Creates a properly configured instance of WebClient, with the messaging service and all it's
|
|
* dependencies initialized.
|
|
*
|
|
* @param {Object} param0
|
|
* @param {Object} [param0.serverData]
|
|
* @param {Object} [param0.services]
|
|
* @param {Object} [param0.loadingBaseDelayDuration]
|
|
* @param {Object} [param0.messagingBeforeCreationDeferred]
|
|
* @param {EventBus} [param0.messagingBus] The event bus to be used by messaging.
|
|
* @returns {WebClient}
|
|
*/
|
|
async function getWebClientReady(param0) {
|
|
setupMainComponentRegistry();
|
|
|
|
const servicesParameters = {};
|
|
const param0Entries = Object.entries(param0);
|
|
for (const [parameterName, value] of param0Entries) {
|
|
if (SERVICES_PARAMETER_NAMES.has(parameterName)) {
|
|
servicesParameters[parameterName] = value;
|
|
}
|
|
}
|
|
setupMessagingServiceRegistries(servicesParameters);
|
|
|
|
const webClientParameters = {};
|
|
for (const [parameterName, value] of param0Entries) {
|
|
if (WEBCLIENT_PARAMETER_NAMES.has(parameterName)) {
|
|
webClientParameters[parameterName] = value;
|
|
}
|
|
}
|
|
return createWebClient(webClientParameters);
|
|
}
|
|
|
|
export {
|
|
getWebClientReady,
|
|
ROUTES_TO_IGNORE,
|
|
};
|