diff options
| author | Aaron Bohy <aab@odoo.com> | 2020-01-14 09:03:21 +0000 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2020-01-21 07:17:31 +0000 |
| commit | 671a5471cd891ac87a2cffc8a0e7ebac1b519725 (patch) | |
| tree | 058f8ad61c5789d385f97b9502b506679d67f380 /addons/web/static/tests/helpers | |
| parent | 45246a3b96e0b41e4072c2703473185abe28d840 (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.js | 21 | ||||
| -rw-r--r-- | addons/web/static/tests/helpers/test_utils.js | 1 | ||||
| -rw-r--r-- | addons/web/static/tests/helpers/test_utils_mock.js | 76 |
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, |
