[FIX] web, mail: test helpers: fix legacy interactions

The new execution environment of wowl tests has to take into account that legacy objects
can be spawned below it and around it, in particular in mail tests where mail has to create
an owl environment with the right keys.

This commit aims at making this work namely by being to pass an already formed legacyEnv
to the createWebClient helper
This commit is contained in:
Lucas Perais (lpe)
2021-06-18 21:31:34 +02:00
committed by Aaron Bohy
parent 7691354132
commit 832ce8d1f9
3 changed files with 46 additions and 28 deletions
+28 -9
View File
@@ -23,7 +23,11 @@ import {
mock,
} from 'web.test_utils';
import Widget from 'web.Widget';
import { createWebClient } from "@web/../tests/webclient/helpers";
import { createWebClient, getActionManagerServerData } from "@web/../tests/webclient/helpers";
import { ComponentAdapter } from "web.OwlCompatibility";
import LegacyMockServer from "web.MockServer";
import LegacyRegistry from "web.Registry";
const {
addMockEnvironment,
@@ -384,8 +388,8 @@ async function createRootComponent(self, Component, { props = {}, target }) {
* @param {Object} [param0.env={}]
* @param {function} [param0.mockFetch]
* @param {function} [param0.mockRPC]
* @param {boolean} [param0.hasActionManager=false] if set, use
* createActionManager.
* @param {boolean} [param0.hasWebClient=false] if set, use
* createWebClient
* @param {boolean} [param0.hasChatWindow=false] if set, mount chat window
* service.
* @param {boolean} [param0.hasDiscuss=false] if set, mount discuss app.
@@ -441,7 +445,7 @@ async function start(param0 = {}) {
};
const {
env: providedEnv,
hasActionManager = false,
hasWebClient = false,
hasChatWindow = false,
hasDialog = false,
hasDiscuss = false,
@@ -456,7 +460,7 @@ async function start(param0 = {}) {
throw Error(`Unknown parameter value ${waitUntilMessagingCondition} for 'waitUntilMessaging'.`);
}
delete param0.env;
delete param0.hasActionManager;
delete param0.hasWebClient;
delete param0.hasChatWindow;
delete param0.hasDiscuss;
delete param0.hasMessagingMenu;
@@ -545,9 +549,14 @@ async function start(param0 = {}) {
}
}
});
} else if (hasActionManager) {
let serverData = kwargs.serverData || {};
delete kwargs.serverData;
} else if (hasWebClient) {
let serverData;
if (!kwargs.serverData) {
serverData = getActionManagerServerData();
} else {
serverData = kwargs.serverData;
delete kwargs.serverData;
}
if (kwargs.actions) {
const actions = {};
@@ -567,9 +576,19 @@ async function start(param0 = {}) {
const mockRPC = kwargs.mockRPC;
delete kwargs.mockRPC;
if (kwargs.services) {
const serviceRegistry = kwargs.serviceRegistry = new LegacyRegistry();
for (const sname in kwargs.services) {
serviceRegistry.add(sname, kwargs.services[sname]);
}
delete kwargs.services;
}
const legacyParams = kwargs;
legacyParams.withLegacyMockServer = true;
const widget = await createWebClient({ serverData, mockRPC, legacyParams });
legacyParams.env = env;
widget = await createWebClient({ serverData, mockRPC, legacyParams });
legacyPatch(widget, {
destroy() {
-8
View File
@@ -128,13 +128,6 @@ function patchLegacyCoreBus() {
});
}
function patchLegacySession() {
const userContext = Object.getOwnPropertyDescriptor(session, "user_context");
registerCleanup(() => {
Object.defineProperty(session, "user_context", userContext);
});
}
function patchOdoo() {
patchWithCleanup(odoo, {
debug: "",
@@ -179,7 +172,6 @@ export async function setupTests() {
forceLocaleAndTimezoneWithCleanup();
patchBrowserWithCleanup();
patchLegacyCoreBus();
patchLegacySession();
patchOdoo();
});
+18 -11
View File
@@ -22,8 +22,6 @@ import { WebClient } from "@web/webclient/webclient";
// web.test_utils easyload xml templates at line : 124:130.
// Also it set the autocomplete delay time for the field Many2One at 0 for the tests at line : 132:137
import "web.test_legacy";
import AbstractAction from "web.AbstractAction";
import AbstractController from "web.AbstractController";
import AbstractService from "web.AbstractService";
import ActionMenus from "web.ActionMenus";
import basicFields from "web.basic_fields";
@@ -44,6 +42,7 @@ import LegacyMockServer from "web.MockServer";
import Widget from "web.Widget";
import { userService } from "@web/core/user_service";
import { uiService } from "@web/core/ui/ui_service";
import { ClientActionAdapter, ViewAdapter } from "@web/legacy/action_adapters";
const { Component, mount, tags } = owl;
@@ -139,7 +138,8 @@ function addLegacyMockEnvironment(env, legacyParams = {}) {
localSession = { getTZOffset: legacyParams.getTZOffset };
}
const legacyEnv = makeTestEnvironment({ dataManager, bus: core.bus, session: localSession });
const baseEnv = { dataManager, bus: core.bus, session: localSession };
const legacyEnv = makeTestEnvironment(Object.assign(baseEnv, legacyParams.env));
if (legacyParams.serviceRegistry) {
const legacyServiceMap = core.serviceRegistry.map;
@@ -155,6 +155,13 @@ function addLegacyMockEnvironment(env, legacyParams = {}) {
Component.env = legacyEnv;
mapLegacyEnvToWowlEnv(legacyEnv, env);
function patchLegacySession() {
const userContext = Object.getOwnPropertyDescriptor(session, "user_context");
registerCleanup(() => {
Object.defineProperty(session, "user_context", userContext);
});
}
patchLegacySession();
serviceRegistry.add("legacy_session", makeLegacySessionService(legacyEnv, session));
// deploy the legacyActionManagerService (in Wowl env)
const legacyActionManagerService = makeLegacyActionManagerService(legacyEnv);
@@ -206,16 +213,16 @@ export async function createWebClient(params) {
// we destroy the webclient and expect every legacy that has been instantiated
// to be destroyed. We thus need to manually destroy them here.
const controllers = [];
patchWithCleanup(AbstractAction.prototype, {
init() {
this._super(...arguments);
controllers.push(this);
patchWithCleanup(ClientActionAdapter.prototype, {
mounted() {
this._super();
controllers.push(this.widget);
},
});
patchWithCleanup(AbstractController.prototype, {
init() {
this._super(...arguments);
controllers.push(this);
patchWithCleanup(ViewAdapter.prototype, {
mounted() {
this._super();
controllers.push(this.widget);
},
});