summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/helpers
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2020-01-14 09:03:21 +0000
committerAaron Bohy <aab@odoo.com>2020-01-21 07:17:31 +0000
commit671a5471cd891ac87a2cffc8a0e7ebac1b519725 (patch)
tree058f8ad61c5789d385f97b9502b506679d67f380 /addons/web/static/tests/helpers
parent45246a3b96e0b41e4072c2703473185abe28d840 (diff)
[IMP] web: Owl compatibility: add ComponentAdapter
This commit adds the ComponentAdapter, an Owl component meant to be used as universal adapter for Owl components that embed Odoo legacy widgets. This component will be a precious tool during the transition phase of converting our JS codebase from the legacy (widget) framework to Owl.
Diffstat (limited to 'addons/web/static/tests/helpers')
-rw-r--r--addons/web/static/tests/helpers/test_env.js21
-rw-r--r--addons/web/static/tests/helpers/test_utils.js1
-rw-r--r--addons/web/static/tests/helpers/test_utils_mock.js76
3 files changed, 89 insertions, 9 deletions
diff --git a/addons/web/static/tests/helpers/test_env.js b/addons/web/static/tests/helpers/test_env.js
index 417350ef65b..fabe52ff444 100644
--- a/addons/web/static/tests/helpers/test_env.js
+++ b/addons/web/static/tests/helpers/test_env.js
@@ -1,8 +1,10 @@
odoo.define('web.test_env', async function (require) {
"use strict";
- const { buildQuery } = require("web.rpc");
+ const AbstractStorageService = require('web.AbstractStorageService');
const Bus = require("web.Bus");
+ const RamStorage = require('web.RamStorage');
+ const { buildQuery } = require("web.rpc");
const session = require('web.session');
/**
@@ -45,6 +47,10 @@ odoo.define('web.test_env', async function (require) {
*/
function makeTestEnvironment(env = {}, providedRPC = null) {
const proxiedEnv = _proxify(env, 'env');
+ const RamStorageService = AbstractStorageService.extend({
+ storage: new RamStorage(),
+ });
+ let testEnv = {};
const defaultEnv = {
_t: env._t || (s => s),
_lt: env._lt || (s => s),
@@ -54,11 +60,22 @@ odoo.define('web.test_env', async function (require) {
}, env.device),
qweb: new owl.QWeb({ templates: session.owlTemplates }),
services: Object.assign({
+ ajax: { // for legacy subwidgets
+ rpc() {
+ const prom = testEnv.session.rpc(...arguments);
+ prom.abort = function () {
+ throw new Error("Can't abort this request");
+ };
+ return prom;
+ },
+ },
getCookie() { },
rpc(params, options) {
const query = buildQuery(params);
return testEnv.session.rpc(query.route, query.params, options);
},
+ local_storage: new RamStorageService(),
+ session_storage: new RamStorageService(),
}, env.services),
session: Object.assign({
rpc(route, params, options) {
@@ -69,7 +86,7 @@ odoo.define('web.test_env', async function (require) {
},
}, env.session),
};
- const testEnv = Object.assign(proxiedEnv, defaultEnv);
+ testEnv = Object.assign(proxiedEnv, defaultEnv);
return testEnv;
}
diff --git a/addons/web/static/tests/helpers/test_utils.js b/addons/web/static/tests/helpers/test_utils.js
index 447c39240a7..a9c07973566 100644
--- a/addons/web/static/tests/helpers/test_utils.js
+++ b/addons/web/static/tests/helpers/test_utils.js
@@ -121,6 +121,7 @@ return Promise.all([
return {
mock: {
addMockEnvironment: testUtilsMock.addMockEnvironment,
+ getMockedOwlEnv: testUtilsMock.getMockedOwlEnv,
intercept: testUtilsMock.intercept,
patch: testUtilsMock.patch,
patchDate: testUtilsMock.patchDate,
diff --git a/addons/web/static/tests/helpers/test_utils_mock.js b/addons/web/static/tests/helpers/test_utils_mock.js
index b4c722b7de1..fe45bbb0e8e 100644
--- a/addons/web/static/tests/helpers/test_utils_mock.js
+++ b/addons/web/static/tests/helpers/test_utils_mock.js
@@ -10,14 +10,15 @@ odoo.define('web.test_utils_mock', function (require) {
* testUtils file.
*/
-var basic_fields = require('web.basic_fields');
-var config = require('web.config');
-var core = require('web.core');
-var dom = require('web.dom');
-var MockServer = require('web.MockServer');
-var session = require('web.session');
+const basic_fields = require('web.basic_fields');
+const config = require('web.config');
+const core = require('web.core');
+const dom = require('web.dom');
+const makeTestEnvironment = require('web.test_env');
+const MockServer = require('web.MockServer');
+const session = require('web.session');
-var DebouncedField = basic_fields.DebouncedField;
+const DebouncedField = basic_fields.DebouncedField;
//------------------------------------------------------------------------------
@@ -360,6 +361,66 @@ function fieldsViewGet(server, params) {
}
/**
+ * Returns a mocked environment to be used by OWL components in tests.
+ *
+ * @param {Object} [params]
+ * @param {Object} [params.actions] the actions given to the mock server
+ * @param {Object} [params.archs] this archs given to the mock server
+ * @param {Object} [params.data] the business data given to the mock server
+ * @param {boolean} [params.debug]
+ * @param {function} [params.mockRPC]
+ * @returns {Object}
+ */
+function getMockedOwlEnv(params) {
+ params = params || {};
+ let Server = MockServer;
+ if (params.mockRPC) {
+ Server = MockServer.extend({ _performRpc: params.mockRPC });
+ }
+ const server = new Server(params.data, {
+ actions: params.actions,
+ archs: params.archs,
+ debug: params.debug,
+ });
+ const env = {
+ dataManager: {
+ load_action: (actionID, context) => {
+ return server.performRpc('/web/action/load', {
+ kwargs: {
+ action_id: actionID,
+ additional_context: context,
+ },
+ });
+ },
+ load_views: (params, options) => {
+ return server.performRpc('/web/dataset/call_kw/' + params.model, {
+ args: [],
+ kwargs: {
+ context: params.context,
+ options: options,
+ views: params.views_descr,
+ },
+ method: 'load_views',
+ model: params.model,
+ }).then(function (views) {
+ return _.mapObject(views, viewParams => {
+ return fieldsViewGet(server, viewParams);
+ });
+ });
+ },
+ load_filters: params => {
+ if (params.debug) {
+ console.log('[mock] load_filters', params);
+ }
+ return Promise.resolve([]);
+ },
+ },
+ session: params.session || {},
+ };
+ return makeTestEnvironment(env, server.performRpc.bind(server));
+}
+
+/**
* intercepts an event bubbling up the widget hierarchy. The event intercepted
* must be a "custom event", i.e. an event generated by the method 'trigger_up'.
*
@@ -573,6 +634,7 @@ function patchSetTimeout() {
return {
addMockEnvironment: addMockEnvironment,
fieldsViewGet: fieldsViewGet,
+ getMockedOwlEnv: getMockedOwlEnv,
intercept: intercept,
patchDate: patchDate,
patch: patch,