From b4ba0fc34082deec8ca6c871ce7a203c0a3a61a4 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Fri, 5 Jun 2020 09:18:14 +0000 Subject: [PATCH] [FIX] *: adapt tests to env rework This commit adapts tests following recent changes on the helpers. The main change is that addMockEnvironment (and all functions using it) are now async, as they need to wait for services to be started. --- addons/bus/static/tests/bus_tests.js | 12 +- .../tests/systray_activity_menu_tests.js | 2 +- .../static/tests/hr_attendance_tests.js | 6 +- .../tests/website_livechat_window_tests.js | 4 +- .../tests/document_thread_window_tests.js | 66 +++++---- .../static/tests/document_viewer_tests.js | 4 +- .../static/tests/mail_status_manager_tests.js | 10 +- .../models/cc_throttle_function_tests.js | 8 +- .../systray/systray_activity_menu_tests.js | 6 +- .../basic_thread_window_tests.js | 30 ++-- .../blank_thread_window_tests.js | 14 +- .../hidden_thread_window_tests.js | 10 +- .../moderation_thread_window_tests.js | 6 +- .../typing_thread_window_tests.js | 6 +- .../static/tests/tools/debug_manager_tests.js | 2 +- .../tests/systray_activity_menu_tests.js | 2 +- ...stock_traceability_report_backend_tests.js | 2 +- .../chrome/keyboard_navigation_mixin_tests.js | 4 +- addons/web/static/tests/chrome/menu_tests.js | 4 +- .../web/static/tests/chrome/systray_tests.js | 3 +- .../static/tests/chrome/user_menu_tests.js | 2 +- .../control_panel/custom_filter_item_tests.js | 31 ++--- addons/web/static/tests/core/dialog_tests.js | 12 +- addons/web/static/tests/core/widget_tests.js | 2 +- .../relational_fields/field_many2one_tests.js | 4 +- .../static/tests/tools/debug_manager_tests.js | 6 +- .../static/tests/views/basic_model_tests.js | 128 +++++++++--------- .../web/static/tests/views/calendar_tests.js | 17 +-- addons/web/static/tests/views/form_tests.js | 17 +-- .../static/tests/views/kanban_model_tests.js | 10 +- addons/web/static/tests/views/kanban_tests.js | 17 +-- addons/web/static/tests/views/list_tests.js | 17 +-- .../tests/widgets/company_switcher_tests.js | 2 +- .../tests/widgets/domain_selector_tests.js | 10 +- .../widgets/model_field_selector_tests.js | 14 +- addons/web_editor/static/tests/test_utils.js | 4 +- .../static/tests/tour_manager_tests.js | 2 +- 37 files changed, 225 insertions(+), 271 deletions(-) diff --git a/addons/bus/static/tests/bus_tests.js b/addons/bus/static/tests/bus_tests.js index 551a145bda9..b13694a7afb 100644 --- a/addons/bus/static/tests/bus_tests.js +++ b/addons/bus/static/tests/bus_tests.js @@ -27,7 +27,7 @@ QUnit.module('Bus', { var pollPromise = testUtils.makeTestPromise(); var parent = new Widget(); - testUtils.mock.addMockEnvironment(parent, { + await testUtils.mock.addMockEnvironment(parent, { data: {}, services: { bus_service: BusService, @@ -101,7 +101,7 @@ QUnit.module('Bus', { var pollPromise = testUtils.makeTestPromise(); var parent = new Widget(); - testUtils.mock.addMockEnvironment(parent, { + await testUtils.mock.addMockEnvironment(parent, { data: {}, services: { bus_service: BusService, @@ -142,7 +142,7 @@ QUnit.module('Bus', { var pollPromiseMaster = testUtils.makeTestPromise(); var parentMaster = new Widget(); - testUtils.mock.addMockEnvironment(parentMaster, { + await testUtils.mock.addMockEnvironment(parentMaster, { data: {}, services: { bus_service: BusService, @@ -173,7 +173,7 @@ QUnit.module('Bus', { // slave await testUtils.nextTick(); var parentSlave = new Widget(); - testUtils.mock.addMockEnvironment(parentSlave, { + await testUtils.mock.addMockEnvironment(parentSlave, { data: {}, services: { bus_service: BusService, @@ -220,7 +220,7 @@ QUnit.module('Bus', { var pollPromiseMaster = testUtils.makeTestPromise(); var parentMaster = new Widget(); - testUtils.mock.addMockEnvironment(parentMaster, { + await testUtils.mock.addMockEnvironment(parentMaster, { data: {}, services: { bus_service: BusService, @@ -252,7 +252,7 @@ QUnit.module('Bus', { await testUtils.nextTick(); var parentSlave = new Widget(); var pollPromiseSlave = testUtils.makeTestPromise(); - testUtils.mock.addMockEnvironment(parentSlave, { + await testUtils.mock.addMockEnvironment(parentSlave, { data: {}, services: { bus_service: BusService, diff --git a/addons/calendar/static/tests/systray_activity_menu_tests.js b/addons/calendar/static/tests/systray_activity_menu_tests.js index 5a25792ff34..02937bae0ed 100644 --- a/addons/calendar/static/tests/systray_activity_menu_tests.js +++ b/addons/calendar/static/tests/systray_activity_menu_tests.js @@ -41,7 +41,7 @@ QUnit.test('activity menu widget:today meetings', async function (assert) { assert.expect(6); var self = this; var activityMenu = new ActivityMenu(); - testUtils.mock.addMockEnvironment(activityMenu, { + await testUtils.mock.addMockEnvironment(activityMenu, { services: this.services, mockRPC: function (route, args) { if (args.method === 'systray_get_activities') { diff --git a/addons/hr_attendance/static/tests/hr_attendance_tests.js b/addons/hr_attendance/static/tests/hr_attendance_tests.js index 22de18817ad..1fc06e7474e 100644 --- a/addons/hr_attendance/static/tests/hr_attendance_tests.js +++ b/addons/hr_attendance/static/tests/hr_attendance_tests.js @@ -59,7 +59,7 @@ QUnit.module('HR Attendance', { var $target = $('#qunit-fixture'); var clientAction = new MyAttendances(null, {}); - testUtils.mock.addMockEnvironment(clientAction, { + await testUtils.mock.addMockEnvironment(clientAction, { data: this.data, session: { uid: 1, @@ -80,7 +80,7 @@ QUnit.module('HR Attendance', { var self = this; var rpcCount = 0; var clientAction = new KioskMode(null, {}); - testUtils.mock.addMockEnvironment(clientAction, { + await testUtils.mock.addMockEnvironment(clientAction, { data: this.data, session: { uid: 1, @@ -124,7 +124,7 @@ QUnit.module('HR Attendance', { barcode: barcode, }; var clientAction = new GreetingMessage(null, action); - testUtils.mock.addMockEnvironment(clientAction, { + await testUtils.mock.addMockEnvironment(clientAction, { data: self.data, session: { uid: 1, diff --git a/addons/im_livechat/static/tests/website_livechat_window_tests.js b/addons/im_livechat/static/tests/website_livechat_window_tests.js index e8a296fa095..8907d790cb1 100644 --- a/addons/im_livechat/static/tests/website_livechat_window_tests.js +++ b/addons/im_livechat/static/tests/website_livechat_window_tests.js @@ -45,7 +45,7 @@ QUnit.test('basic rendering', async function (assert) { livechat.setMessages(messages); var chatWindow = new ChatWindow(parent, livechat); - testUtils.mock.addMockEnvironment(parent, {}); + await testUtils.mock.addMockEnvironment(parent, {}); await chatWindow.appendTo($('#qunit-fixture')); chatWindow.render(); @@ -95,7 +95,7 @@ QUnit.test('define several livechat colors', async function (assert) { headerBackgroundColor: 'yellow', titleColor: 'green', }); - testUtils.mock.addMockEnvironment(parent, {}); + await testUtils.mock.addMockEnvironment(parent, {}); await chatWindow.appendTo($('#qunit-fixture')); chatWindow.render(); assert.strictEqual( diff --git a/addons/mail/static/tests/document_thread_window_tests.js b/addons/mail/static/tests/document_thread_window_tests.js index f01ab0925f2..c4a84040433 100644 --- a/addons/mail/static/tests/document_thread_window_tests.js +++ b/addons/mail/static/tests/document_thread_window_tests.js @@ -1,6 +1,8 @@ odoo.define('mail.documentThreadWindowTests', function (require) { "use strict"; +const Bus = require('web.Bus'); +const LocalStorageService = require('web.LocalStorageService'); var mailTestUtils = require('mail.testUtils'); var MessagingMenu = require('mail.systray.MessagingMenu'); @@ -128,20 +130,23 @@ QUnit.test('open a document thread in a thread window', async function (assert) QUnit.test('expand a document thread window', async function (assert) { assert.expect(4); + const bus = new Bus(); + bus.on('do-action', null, function (payload) { + assert.deepEqual(payload.action, { + res_id: 1, + res_model: 'some.res.model', + type: 'ir.actions.act_window', + views: [[false, 'form']], + }, "should open the document in form view"); + }); + var messagingMenu = new MessagingMenu(); await testUtils.mock.addMockEnvironment(messagingMenu, { services: this.services, data: this.data, session: this.session, - intercepts: { - do_action: function (ev) { - assert.deepEqual(ev.data.action, { - res_id: 1, - res_model: 'some.res.model', - type: 'ir.actions.act_window', - views: [[false, 'form']], - }, "should open the document in form view"); - }, + env: { + bus }, }); await messagingMenu.appendTo($('#qunit-fixture')); @@ -177,8 +182,18 @@ QUnit.test('post messages in a document thread window', async function (assert) res_id: 1, }; var messagingMenu = new MessagingMenu(); + const MockedLocalStorageService = LocalStorageService.extend({ + setItem(key, value) { + if (key === 'mail.document_threads_last_message') { + assert.deepEqual(value.messageData, newMessage, + "should write sent message in local storage, to share info with other tabs"); + } + }, + }); await testUtils.mock.addMockEnvironment(messagingMenu, { - services: this.services, + services: Object.assign(this.services, { + local_storage: MockedLocalStorageService, + }), data: this.data, session: this.session, mockRPC: function (route, args) { @@ -198,13 +213,7 @@ QUnit.test('post messages in a document thread window', async function (assert) return this._super.apply(this, arguments); }, }); - testUtils.mock.intercept(messagingMenu, 'call_service', function (ev) { - if (ev.data.service === 'local_storage' && ev.data.method === 'setItem' && - ev.data.args[0] === 'mail.document_threads_last_message') { - assert.deepEqual(ev.data.args[1].messageData, newMessage, - "should write sent message in local storage, to share info with other tabs"); - } - }, true); + await messagingMenu.appendTo($('#qunit-fixture')); // toggle the messaging menu and open the documentThread @@ -229,24 +238,25 @@ QUnit.test('post messages in a document thread window', async function (assert) QUnit.test('open, fold, unfold and close a document thread window', async function (assert) { assert.expect(20); var messagingMenu = new MessagingMenu(); - await testUtils.mock.addMockEnvironment(messagingMenu, { - services: this.services, - data: this.data, - session: this.session, - }); - await testUtils.nextTick(); - testUtils.mock.intercept(messagingMenu, 'call_service', function (ev) { - if (ev.data.service === 'local_storage' && ev.data.method === 'setItem') { - const key = ev.data.args[0]; + const MockedLocalStorageService = LocalStorageService.extend({ + setItem(key, value) { if (key === 'mail.document_threads_state/some.res.model_1') { - const state = ev.data.args[1].state; + const state = value.state; assert.ok(state); assert.ok(state.name); assert.ok(state.windowState); assert.step(`${key}: { name: "${state.name}", windowState: '${state.windowState}' }`); } } - }, true); + }); + await testUtils.mock.addMockEnvironment(messagingMenu, { + services: Object.assign(this.services, { + local_storage: MockedLocalStorageService, + }), + data: this.data, + session: this.session, + }); + await testUtils.nextTick(); await messagingMenu.appendTo($('#qunit-fixture')); // toggle the messaging menu and open the documentThread diff --git a/addons/mail/static/tests/document_viewer_tests.js b/addons/mail/static/tests/document_viewer_tests.js index aa50483b48a..ca6b433d519 100644 --- a/addons/mail/static/tests/document_viewer_tests.js +++ b/addons/mail/static/tests/document_viewer_tests.js @@ -14,7 +14,7 @@ var Widget = require('web.Widget'); * @param {boolean} [params.debug] * @returns {DocumentViewer} */ -var createViewer = function (params) { +var createViewer = async function (params) { var parent = new Widget(); var viewer = new DocumentViewer(parent, params.attachments, params.attachmentID); @@ -32,7 +32,7 @@ var createViewer = function (params) { return Promise.resolve(); } }; - testUtils.mock.addMockEnvironment(parent, { + await testUtils.mock.addMockEnvironment(parent, { mockRPC: function () { if (params.mockRPC) { var _super = this._super; diff --git a/addons/mail/static/tests/mail_status_manager_tests.js b/addons/mail/static/tests/mail_status_manager_tests.js index f21cefdec9e..891cf3aaa68 100644 --- a/addons/mail/static/tests/mail_status_manager_tests.js +++ b/addons/mail/static/tests/mail_status_manager_tests.js @@ -17,9 +17,9 @@ QUnit.module('Status manager', { this.timeoutMock = mailTestUtils.patchMailTimeouts(); }, }); -QUnit.test('simple set im_status', function (assert) { +QUnit.test('simple set im_status', async function (assert) { assert.expect(1); - var parent = testUtils.createParent({ + var parent = await testUtils.createParent({ services: this.services, mockRPC: function (route, args) { if (route === '/mail/init_messaging') { @@ -41,7 +41,7 @@ QUnit.test('simple set im_status', function (assert) { QUnit.test('multi get_im_status', async function (assert) { assert.expect(8); var readCount = 0; - var parent = testUtils.createParent({ + var parent = await testUtils.createParent({ //data: this.data, services: this.services, mockRPC: function (route, args) { @@ -86,7 +86,7 @@ QUnit.test('multi get_im_status', async function (assert) { QUnit.test('update loop', async function (assert) { assert.expect(10); var readCount = 0; - var parent = testUtils.createParent({ + var parent = await testUtils.createParent({ services: this.services, mockRPC: function (route, args) { if (route === '/mail/init_messaging') { @@ -162,7 +162,7 @@ QUnit.test('update status', async function (assert) { } }); var statusWidget = new StatusWidget(); - testUtils.mock.addMockEnvironment(statusWidget, { + await testUtils.mock.addMockEnvironment(statusWidget, { services: this.services, mockRPC: function (route, args) { if (route === '/mail/init_messaging') { diff --git a/addons/mail/static/tests/models/cc_throttle_function_tests.js b/addons/mail/static/tests/models/cc_throttle_function_tests.js index 5ab00ef6048..f760675b1f3 100644 --- a/addons/mail/static/tests/models/cc_throttle_function_tests.js +++ b/addons/mail/static/tests/models/cc_throttle_function_tests.js @@ -31,7 +31,7 @@ QUnit.module('mail', { QUnit.module('model', {}, function () { QUnit.module('CC Throttle Function'); -QUnit.test('cancel()', function (assert) { +QUnit.test('cancel()', async function (assert) { var done = assert.async(); assert.expect(3); @@ -39,7 +39,7 @@ QUnit.test('cancel()', function (assert) { var def = testUtils.makeTestPromise(); var step = 1; - var widget = testUtils.createParent({ + var widget = await testUtils.createParent({ mockRPC: function (route, args) { if (args.method === '__rpc__') { assert.step(args.method + args.args[0]); @@ -87,7 +87,7 @@ QUnit.test('cancel()', function (assert) { }); }); -QUnit.test('clear()', function (assert) { +QUnit.test('clear()', async function (assert) { var done = assert.async(); assert.expect(5); @@ -96,7 +96,7 @@ QUnit.test('clear()', function (assert) { var def2 = testUtils.makeTestPromise(); var step = 1; - var widget = testUtils.createParent({ + var widget = await testUtils.createParent({ mockRPC: function (route, args) { if (args.method === '__rpc__') { assert.step(args.method + args.args[0]); diff --git a/addons/mail/static/tests/systray/systray_activity_menu_tests.js b/addons/mail/static/tests/systray/systray_activity_menu_tests.js index 1cedca2b9c1..23f3500001b 100644 --- a/addons/mail/static/tests/systray/systray_activity_menu_tests.js +++ b/addons/mail/static/tests/systray/systray_activity_menu_tests.js @@ -83,7 +83,7 @@ QUnit.test('activity menu widget: menu with no records', async function (assert) assert.expect(1); var activityMenu = new ActivityMenu(); - testUtils.mock.addMockEnvironment(activityMenu, { + await testUtils.mock.addMockEnvironment(activityMenu, { services: this.services, mockRPC: function (route, args) { if (args.method === 'systray_get_activities') { @@ -102,7 +102,7 @@ QUnit.test('activity menu widget: activity menu with 3 records', async function assert.expect(10); var self = this; var activityMenu = new ActivityMenu(); - testUtils.mock.addMockEnvironment(activityMenu, { + await testUtils.mock.addMockEnvironment(activityMenu, { services: this.services, mockRPC: function (route, args) { if (args.method === 'systray_get_activities') { @@ -163,7 +163,7 @@ QUnit.test('activity menu widget: activity view icon', async function (assert) { assert.expect(12); var self = this; var activityMenu = new ActivityMenu(); - testUtils.mock.addMockEnvironment(activityMenu, { + await testUtils.mock.addMockEnvironment(activityMenu, { services: this.services, session: this.session, mockRPC: function (route, args) { diff --git a/addons/mail/static/tests/thread_window/basic_thread_window_tests.js b/addons/mail/static/tests/thread_window/basic_thread_window_tests.js index 87e3c536998..61414d2aeaa 100644 --- a/addons/mail/static/tests/thread_window/basic_thread_window_tests.js +++ b/addons/mail/static/tests/thread_window/basic_thread_window_tests.js @@ -56,7 +56,7 @@ QUnit.module('Basic', { this.services = mailTestUtils.getMailServices(); this.ORIGINAL_THREAD_WINDOW_APPENDTO = this.services.mail_service.prototype.THREAD_WINDOW_APPENDTO; - this.createParent = function (params) { + this.createParent = async function (params) { var widget = new Widget(); // in non-debug mode, append thread windows in qunit-fixture @@ -68,7 +68,7 @@ QUnit.module('Basic', { self.services.mail_service.prototype.THREAD_WINDOW_APPENDTO = '#qunit-fixture'; } - testUtils.mock.addMockEnvironment(widget, params); + await testUtils.mock.addMockEnvironment(widget, params); return widget; }; }, @@ -81,7 +81,7 @@ QUnit.module('Basic', { QUnit.test('basic rendering thread window', async function (assert) { assert.expect(10); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -128,7 +128,7 @@ QUnit.test('basic rendering thread window', async function (assert) { QUnit.test('close thread window using ESCAPE key', async function (assert) { assert.expect(5); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, mockRPC: function (route, args) { @@ -169,7 +169,7 @@ QUnit.test('close thread window using ESCAPE key', async function (assert) { QUnit.test('thread window\'s input can still be focused when the UI is blocked', async function (assert) { assert.expect(2); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -205,7 +205,7 @@ QUnit.test('thread window\'s input can still be focused when the UI is blocked', QUnit.test('emoji popover should open correctly in thread windows', async function (assert) { assert.expect(1); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -227,7 +227,7 @@ QUnit.test('emoji popover should open correctly in thread windows', async functi QUnit.test('do not increase unread counter when receiving message with myself as author', async function (assert) { assert.expect(4); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, session: { partner_id: 3 } @@ -274,7 +274,7 @@ QUnit.test('do not increment unread counter with focus on thread window', async // order to set the focus on it. assert.expect(2); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, session: { partner_id: 3 } @@ -322,7 +322,7 @@ QUnit.test('do not mark as read the newly open thread window from received messa message_unread_counter: 0, }]; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, session: { partner_id: 3 }, @@ -393,7 +393,7 @@ QUnit.test('show document link of message linked to a document', async function channel_type: "public", }); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, session: { partner_id: 3 }, @@ -510,7 +510,7 @@ QUnit.test('do not auto-focus chat window on receiving new message from new DM', state: 'open', }]; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, session: { partner_id: 3 }, @@ -600,7 +600,7 @@ QUnit.test('no out-of-office status in thread window', async function (assert) { }], }, }; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -650,7 +650,7 @@ QUnit.test('receive 2 new DM messages in quick succession (no chat window initia }], }; - const parent = this.createParent({ + const parent = await this.createParent({ data: this.data, mockRPC(route, args) { if (args.method === 'channel_minimize') { @@ -740,7 +740,7 @@ QUnit.test('non-deletable message attachments', async function (assert) { record_name: "general", res_id: 1, }]; - const parent = this.createParent({ + const parent = await this.createParent({ data: this.data, services: this.services, }); @@ -781,7 +781,7 @@ QUnit.test('join channel from click channel mention', async function (assert) { channel_ids: [1], }); - const parent = this.createParent({ + const parent = await this.createParent({ data: this.data, services: this.services, session: { partner_id: 3 }, diff --git a/addons/mail/static/tests/thread_window/blank_thread_window_tests.js b/addons/mail/static/tests/thread_window/blank_thread_window_tests.js index 4a24a80d4c3..2d295144b62 100644 --- a/addons/mail/static/tests/thread_window/blank_thread_window_tests.js +++ b/addons/mail/static/tests/thread_window/blank_thread_window_tests.js @@ -32,7 +32,7 @@ QUnit.module('Blank', { this.services = mailTestUtils.getMailServices(); this.ORIGINAL_THREAD_WINDOW_APPENDTO = this.services.mail_service.prototype.THREAD_WINDOW_APPENDTO; - this.createParent = function (params) { + this.createParent = async function (params) { var widget = new Widget(); // in non-debug mode, append thread windows in qunit-fixture @@ -44,7 +44,7 @@ QUnit.module('Blank', { self.services.mail_service.prototype.THREAD_WINDOW_APPENDTO = '#qunit-fixture'; } - testUtils.mock.addMockEnvironment(widget, params); + await testUtils.mock.addMockEnvironment(widget, params); return widget; }; @@ -90,7 +90,7 @@ QUnit.module('Blank', { QUnit.test('basic rendering blank thread window', async function (assert) { assert.expect(5); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -117,7 +117,7 @@ QUnit.test('basic rendering blank thread window', async function (assert) { QUnit.test('close blank thread window', async function (assert) { assert.expect(1); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -139,7 +139,7 @@ QUnit.test('fold blank thread window', async function (assert) { // (e.g. 400px) assert.expect(3); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -191,7 +191,7 @@ QUnit.test('open new DM chat from blank thread window', async function (assert) records: [], }; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, mockRPC: function (route, args) { @@ -274,7 +274,7 @@ QUnit.test('open already detached DM chat from blank thread window', async funct name: 'DemoUser1', }]; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, mockRPC: function (route, args) { diff --git a/addons/mail/static/tests/thread_window/hidden_thread_window_tests.js b/addons/mail/static/tests/thread_window/hidden_thread_window_tests.js index 078230e276a..36da266128c 100644 --- a/addons/mail/static/tests/thread_window/hidden_thread_window_tests.js +++ b/addons/mail/static/tests/thread_window/hidden_thread_window_tests.js @@ -31,7 +31,7 @@ QUnit.module('Hidden', { this.services = mailTestUtils.getMailServices(); this.ORIGINAL_THREAD_WINDOW_APPENDTO = this.services.mail_service.prototype.THREAD_WINDOW_APPENDTO; - this.createParent = function (params) { + this.createParent = async function (params) { var widget = new Widget(); // in non-debug mode, append thread windows in qunit-fixture @@ -43,7 +43,7 @@ QUnit.module('Hidden', { self.services.mail_service.prototype.THREAD_WINDOW_APPENDTO = '#qunit-fixture'; } - testUtils.mock.addMockEnvironment(widget, params); + await testUtils.mock.addMockEnvironment(widget, params); return widget; }; }, @@ -86,7 +86,7 @@ QUnit.test('hidden thread windows dropdown when not enough horizontal space (ver }, }; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -172,7 +172,7 @@ QUnit.test('hidden thread windows dropdown when not enough horizontal space (ver }, }; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); @@ -266,7 +266,7 @@ QUnit.test('receive message from hidden thread window', async function (assert) }, }; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); diff --git a/addons/mail/static/tests/thread_window/moderation_thread_window_tests.js b/addons/mail/static/tests/thread_window/moderation_thread_window_tests.js index 732a5fe7938..db2561fd048 100644 --- a/addons/mail/static/tests/thread_window/moderation_thread_window_tests.js +++ b/addons/mail/static/tests/thread_window/moderation_thread_window_tests.js @@ -62,7 +62,7 @@ QUnit.module('Moderation', { this.services = mailTestUtils.getMailServices(); this.ORIGINAL_THREAD_WINDOW_APPENDTO = this.services.mail_service.prototype.THREAD_WINDOW_APPENDTO; - this.createParent = function (params) { + this.createParent = async function (params) { var widget = new Widget(); // in non-debug mode, append thread windows in qunit-fixture @@ -74,7 +74,7 @@ QUnit.module('Moderation', { self.services.mail_service.prototype.THREAD_WINDOW_APPENDTO = '#qunit-fixture'; } - testUtils.mock.addMockEnvironment(widget, params); + await testUtils.mock.addMockEnvironment(widget, params); return widget; }; }, @@ -110,7 +110,7 @@ QUnit.test('moderator: moderated channel with pending moderation message', async res_id: 1, }]; - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, }); diff --git a/addons/mail/static/tests/thread_window/typing_thread_window_tests.js b/addons/mail/static/tests/thread_window/typing_thread_window_tests.js index be2bd4beec8..53960dc283d 100644 --- a/addons/mail/static/tests/thread_window/typing_thread_window_tests.js +++ b/addons/mail/static/tests/thread_window/typing_thread_window_tests.js @@ -51,7 +51,7 @@ QUnit.module('Typing', { await testUtils.nextMicrotaskTick(); }; - this.createParent = function (params) { + this.createParent = async function (params) { var widget = new Widget(); // in non-debug mode, append thread windows in qunit-fixture @@ -63,7 +63,7 @@ QUnit.module('Typing', { self.services.mail_service.prototype.THREAD_WINDOW_APPENDTO = '#qunit-fixture'; } - testUtils.mock.addMockEnvironment(widget, params); + await testUtils.mock.addMockEnvironment(widget, params); return widget; }; }, @@ -76,7 +76,7 @@ QUnit.module('Typing', { QUnit.test('receive typing notification', async function (assert) { assert.expect(4); - var parent = this.createParent({ + var parent = await this.createParent({ data: this.data, services: this.services, mockRPC: function (route, args) { diff --git a/addons/mail/static/tests/tools/debug_manager_tests.js b/addons/mail/static/tests/tools/debug_manager_tests.js index c21d36572b9..151b89024b6 100644 --- a/addons/mail/static/tests/tools/debug_manager_tests.js +++ b/addons/mail/static/tests/tools/debug_manager_tests.js @@ -10,7 +10,7 @@ QUnit.module('Mail DebugManager', {}, function () { QUnit.test("Manage Messages", async function (assert) { assert.expect(3); - var debugManager = createDebugManager({ + var debugManager = await createDebugManager({ intercepts: { do_action: function (event) { assert.deepEqual(event.data.action, { diff --git a/addons/note/static/tests/systray_activity_menu_tests.js b/addons/note/static/tests/systray_activity_menu_tests.js index 768412df2eb..85ca835e674 100644 --- a/addons/note/static/tests/systray_activity_menu_tests.js +++ b/addons/note/static/tests/systray_activity_menu_tests.js @@ -38,7 +38,7 @@ QUnit.test('note activity menu widget: create note from activity menu', async fu assert.expect(15); var self = this; var activityMenu = new ActivityMenu(); - testUtils.mock.addMockEnvironment(activityMenu, { + await testUtils.mock.addMockEnvironment(activityMenu, { services: this.services, mockRPC: function (route, args) { if (args.method === 'systray_get_activities') { diff --git a/addons/stock/static/tests/stock_traceability_report_backend_tests.js b/addons/stock/static/tests/stock_traceability_report_backend_tests.js index feba8f0f9e5..20a9d809d70 100644 --- a/addons/stock/static/tests/stock_traceability_report_backend_tests.js +++ b/addons/stock/static/tests/stock_traceability_report_backend_tests.js @@ -13,7 +13,7 @@ odoo.define('stock.stock_traceability_report_backend_tests', function (require) * @returns {Promise} */ async function createStockReportAction(params) { - const parent = testUtils.createParent(params); + const parent = await testUtils.createParent(params); const report = new StockReportGeneric(parent, params.action); const target = testUtils.prepareTarget(params.debug); diff --git a/addons/web/static/tests/chrome/keyboard_navigation_mixin_tests.js b/addons/web/static/tests/chrome/keyboard_navigation_mixin_tests.js index dcf1c23ce39..b0c638dd802 100644 --- a/addons/web/static/tests/chrome/keyboard_navigation_mixin_tests.js +++ b/addons/web/static/tests/chrome/keyboard_navigation_mixin_tests.js @@ -26,7 +26,7 @@ QUnit.module('KeyboardNavigationMixin', function () { return this._super(...arguments); }, }); - var parent = testUtils.createParent({}); + var parent = await testUtils.createParent({}); var w = new KeyboardWidget(parent); await w.appendTo($target); @@ -67,7 +67,7 @@ QUnit.module('KeyboardNavigationMixin', function () { return this._super(...arguments); }, }); - var parent = testUtils.createParent({}); + var parent = await testUtils.createParent({}); var w = new KeyboardWidget(parent); await w.appendTo($target); diff --git a/addons/web/static/tests/chrome/menu_tests.js b/addons/web/static/tests/chrome/menu_tests.js index c7ce40b16c2..a50e2189906 100644 --- a/addons/web/static/tests/chrome/menu_tests.js +++ b/addons/web/static/tests/chrome/menu_tests.js @@ -13,7 +13,7 @@ odoo.define('web.menu_tests', function (require) { QUnit.test('Systray on_attach_callback is called', async function (assert) { assert.expect(4); - const parent = testUtils.createParent({}); + const parent = await testUtils.createParent({}); // Add some widgets to the systray const Widget1 = Widget.extend({ @@ -22,7 +22,7 @@ odoo.define('web.menu_tests', function (require) { const Widget2 = Widget.extend({ on_attach_callback: () => assert.step('on_attach_callback widget2') }); - SystrayMenu.Items = [Widget1, Widget2] + SystrayMenu.Items = [Widget1, Widget2]; testUtils.mock.patch(SystrayMenu, { on_attach_callback: function () { diff --git a/addons/web/static/tests/chrome/systray_tests.js b/addons/web/static/tests/chrome/systray_tests.js index c5238ceff04..941e275f19b 100644 --- a/addons/web/static/tests/chrome/systray_tests.js +++ b/addons/web/static/tests/chrome/systray_tests.js @@ -7,8 +7,7 @@ odoo.define('web.systray_tests', function (require) { QUnit.test('Adding async components to the registry respects the sequence', async function (assert) { assert.expect(2); - var parent = testUtils.createParent({ - }); + var parent = await testUtils.createParent({}); var prom = testUtils.makeTestPromise(); var synchronousFirstWidget = Widget.extend({ diff --git a/addons/web/static/tests/chrome/user_menu_tests.js b/addons/web/static/tests/chrome/user_menu_tests.js index 73c74b0753c..752697a5228 100644 --- a/addons/web/static/tests/chrome/user_menu_tests.js +++ b/addons/web/static/tests/chrome/user_menu_tests.js @@ -13,7 +13,7 @@ QUnit.module('chrome', {}, function () { var parent = new Widget(); - testUtils.mock.addMockEnvironment(parent, {}); + await testUtils.mock.addMockEnvironment(parent, {}); var userMenu = new UserMenu(parent); await userMenu.appendTo($('body')); diff --git a/addons/web/static/tests/control_panel/custom_filter_item_tests.js b/addons/web/static/tests/control_panel/custom_filter_item_tests.js index 52a5aa738a6..7602f56aae0 100644 --- a/addons/web/static/tests/control_panel/custom_filter_item_tests.js +++ b/addons/web/static/tests/control_panel/custom_filter_item_tests.js @@ -6,21 +6,10 @@ odoo.define('web.filter_menu_generator_tests', function (require) { const { Model } = require('web.model'); const pyUtils = require('web.py_utils'); const testUtils = require('web.test_utils'); - const session = require('web.session'); const cpHelpers = testUtils.controlPanel; const { createComponent } = testUtils; - function patchSession(newSession) { - // We have to patch the "legacy" session because field_utils is using it. - // TODO: remove it when the field_utils are re-written. - const initialSession = session; - Object.assign(session, newSession); - return function () { - Object.assign(session, initialSession); - }; - } - QUnit.module('Components', { beforeEach: function () { this.fields = { @@ -203,11 +192,6 @@ odoo.define('web.filter_menu_generator_tests', function (require) { QUnit.test('custom filter datetime with equal operator', async function (assert) { assert.expect(4); - patchSession({ - getTZOffset: function () { - return -240; - }, - }); class MockedControlPanelModel extends Model { createNewFilters(preFilters) { const preFilter = preFilters[0]; @@ -224,6 +208,11 @@ odoo.define('web.filter_menu_generator_tests', function (require) { props: { fields: this.fields, }, + session: { + getTZOffset() { + return -240; + }, + }, env: { controlPanelModel }, }); @@ -243,11 +232,6 @@ odoo.define('web.filter_menu_generator_tests', function (require) { QUnit.test('custom filter datetime between operator', async function (assert) { assert.expect(4); - patchSession({ - getTZOffset: function () { - return -240; - }, - }); class MockedControlPanelModel extends Model { createNewFilters(preFilters) { const preFilter = preFilters[0]; @@ -265,6 +249,11 @@ odoo.define('web.filter_menu_generator_tests', function (require) { props: { fields: this.fields, }, + session: { + getTZOffset() { + return -240; + }, + }, env: { controlPanelModel }, }); diff --git a/addons/web/static/tests/core/dialog_tests.js b/addons/web/static/tests/core/dialog_tests.js index ea3a672322f..c51239a01bb 100644 --- a/addons/web/static/tests/core/dialog_tests.js +++ b/addons/web/static/tests/core/dialog_tests.js @@ -7,10 +7,10 @@ var Widget = require('web.Widget'); var ESCAPE_KEY = $.Event("keyup", { which: 27 }); -function createEmptyParent(debug) { +async function createEmptyParent(debug) { var widget = new Widget(); - testUtils.mock.addMockEnvironment(widget, { + await testUtils.mock.addMockEnvironment(widget, { debug: debug || false, }); return widget; @@ -24,7 +24,7 @@ QUnit.module('core', {}, function () { assert.expect(3); var testPromise = testUtils.makeTestPromiseWithAssert(assert, 'custom callback'); - var parent = createEmptyParent(); + var parent = await createEmptyParent(); new Dialog(parent, { buttons: [ { @@ -54,7 +54,7 @@ QUnit.module('core', {}, function () { assert.expect(3); var testPromise = testUtils.makeTestPromiseWithAssert(assert, 'custom callback'); - var parent = createEmptyParent(); + var parent = await createEmptyParent(); new Dialog(parent, { buttons: [ { @@ -84,7 +84,7 @@ QUnit.module('core', {}, function () { assert.expect(3); var testPromise = testUtils.makeTestPromiseWithAssert(assert, 'confirm callback'); - var parent = createEmptyParent(); + var parent = await createEmptyParent(); var options = { confirm_callback: testPromise.reject, cancel_callback: testPromise.resolve, @@ -107,7 +107,7 @@ QUnit.module('core', {}, function () { assert.expect(3); var testPromise = testUtils.makeTestPromiseWithAssert(assert, 'alert callback'); - var parent = createEmptyParent(); + var parent = await createEmptyParent(); var options = { confirm_callback: testPromise.resolve, }; diff --git a/addons/web/static/tests/core/widget_tests.js b/addons/web/static/tests/core/widget_tests.js index f8283f91c35..1c1c59f1d52 100644 --- a/addons/web/static/tests/core/widget_tests.js +++ b/addons/web/static/tests/core/widget_tests.js @@ -402,7 +402,7 @@ QUnit.module('core', {}, function () { var def; var parent = new Widget(); - testUtils.mock.addMockEnvironment(parent, { + await testUtils.mock.addMockEnvironment(parent, { session: { rpc: function () { def = testUtils.makeTestPromise(); diff --git a/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js b/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js index 856019092fe..98ff6a47925 100644 --- a/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js +++ b/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js @@ -1060,7 +1060,7 @@ QUnit.module('fields', {}, function () { var fixture = $('#qunit-fixture'); var self = this; - var model = testUtils.createModel({ + var model = await testUtils.createModel({ Model: BasicModel, data: this.data, }); @@ -1083,7 +1083,7 @@ QUnit.module('fields', {}, function () { }); var parent = new StandaloneWidget(model); model.setParent(parent); - testUtils.mock.addMockEnvironment(parent, { + await testUtils.mock.addMockEnvironment(parent, { data: self.data, mockRPC: function (route, args) { assert.step(args.method); diff --git a/addons/web/static/tests/tools/debug_manager_tests.js b/addons/web/static/tests/tools/debug_manager_tests.js index 0f850835c66..77970a1922e 100644 --- a/addons/web/static/tests/tools/debug_manager_tests.js +++ b/addons/web/static/tests/tools/debug_manager_tests.js @@ -11,7 +11,7 @@ QUnit.module('DebugManager', {}, function () { QUnit.test("list: edit view menu item", async function (assert) { assert.expect(3); - var debugManager = createDebugManager(); + var debugManager = await createDebugManager(); await debugManager.appendTo($('#qunit-fixture')); @@ -43,7 +43,7 @@ QUnit.module('DebugManager', {}, function () { QUnit.test("form: Manage Attachments option", async function (assert) { assert.expect(3); - var debugManager = createDebugManager({ + var debugManager = await createDebugManager({ intercepts: { do_action: function (event) { assert.deepEqual(event.data.action, { @@ -126,7 +126,7 @@ QUnit.module('DebugManager', {}, function () { }); // Now the real tested component - var debugManager = createDebugManager({ + var debugManager = await createDebugManager({ data: data, mockRPC: function (route, args) { if (route == "/web/dataset/call_kw/ir.default/set") { diff --git a/addons/web/static/tests/views/basic_model_tests.js b/addons/web/static/tests/views/basic_model_tests.js index 326c8550bb5..3d28a32cf2e 100644 --- a/addons/web/static/tests/views/basic_model_tests.js +++ b/addons/web/static/tests/views/basic_model_tests.js @@ -136,7 +136,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo']; this.params.context = { active_field: 2 }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -171,7 +171,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = 99; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -190,7 +190,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo', 'qux']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -211,7 +211,7 @@ odoo.define('web.basic_model_tests', function (require) { this.data.partner.records[1].qux = 1; this.params.fieldNames = ['qux']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -238,7 +238,7 @@ odoo.define('web.basic_model_tests', function (require) { var rpcCount = 0; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -277,7 +277,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo', 'bar']; this.params.context = { hello: 'world' }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -317,7 +317,7 @@ odoo.define('web.basic_model_tests', function (require) { var rpcCount = 0; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -354,7 +354,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -381,7 +381,7 @@ odoo.define('web.basic_model_tests', function (require) { this.data.partner.records[1].product_ids = [37]; this.params.fieldNames = ['product_ids']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -461,7 +461,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['product_id']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -495,7 +495,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo', 'product_id']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -524,7 +524,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo', 'product_id']; this.params.res_id = 1; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -553,7 +553,7 @@ odoo.define('web.basic_model_tests', function (require) { }, }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -583,7 +583,7 @@ odoo.define('web.basic_model_tests', function (require) { }, }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -615,7 +615,7 @@ odoo.define('web.basic_model_tests', function (require) { }, }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -641,7 +641,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; this.params.context = { active_field: 2 }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -671,7 +671,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.groupedBy = []; this.params.res_id = undefined; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -698,7 +698,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; this.params.type = 'record'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -732,7 +732,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; this.params.type = 'record'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -784,7 +784,7 @@ odoo.define('web.basic_model_tests', function (require) { }; this.params.viewType = 'form'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -822,7 +822,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; this.params.type = 'record'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -848,7 +848,7 @@ odoo.define('web.basic_model_tests', function (require) { fields.product_id.default = 37; fields.other_product_id.default = 41; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -880,7 +880,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -902,7 +902,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['category']; this.params.res_id = 1; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -927,7 +927,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['foo']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -951,7 +951,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['product_id']; var self = this; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -981,7 +981,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; var filterEnabled = false; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1046,7 +1046,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.groupedBy = ['date:month']; this.params.res_id = undefined; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1072,7 +1072,7 @@ odoo.define('web.basic_model_tests', function (require) { }; this.data.partner.records[0].selection = 'a'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1108,7 +1108,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.context = { active_field: 2 }; var id; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1146,7 +1146,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['product_ids']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1183,7 +1183,7 @@ odoo.define('web.basic_model_tests', function (require) { QUnit.test('create commands on a one2many', async function (assert) { assert.expect(3); - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1260,7 +1260,7 @@ odoo.define('web.basic_model_tests', function (require) { type: 'record', }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1297,7 +1297,7 @@ odoo.define('web.basic_model_tests', function (require) { QUnit.test('dates are properly loaded and parsed (record)', async function (assert) { assert.expect(2); - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1328,7 +1328,7 @@ odoo.define('web.basic_model_tests', function (require) { QUnit.test('dates are properly loaded and parsed (list)', async function (assert) { assert.expect(2); - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1355,7 +1355,7 @@ odoo.define('web.basic_model_tests', function (require) { QUnit.test('dates are properly loaded and parsed (default_get)', async function (assert) { assert.expect(1); - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1379,7 +1379,7 @@ odoo.define('web.basic_model_tests', function (require) { this.data.partner.fields.category.default = [12, 14]; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1412,7 +1412,7 @@ odoo.define('web.basic_model_tests', function (require) { }; this.data.partner.fields.category.type = 'many2one'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1464,7 +1464,7 @@ odoo.define('web.basic_model_tests', function (require) { string: "O2M", type: 'one2many', relation: 'partner', default: [[6, 0, [1]]], }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1510,7 +1510,7 @@ odoo.define('web.basic_model_tests', function (require) { this.data.partner.fields.product_id.context = "{'hello': 'world', 'test': foo}"; this.data.partner.fields.product_id.domain = "[['hello', 'like', 'world'], ['test', 'like', foo]]"; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1538,7 +1538,7 @@ odoo.define('web.basic_model_tests', function (require) { model.destroy(); // Try again with xml override of field domain and context - model = createModel({ + model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1585,7 +1585,7 @@ odoo.define('web.basic_model_tests', function (require) { } }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1650,7 +1650,7 @@ odoo.define('web.basic_model_tests', function (require) { } }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1699,7 +1699,7 @@ odoo.define('web.basic_model_tests', function (require) { QUnit.test('default_get with one2many values', async function (assert) { assert.expect(1); - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1738,7 +1738,7 @@ odoo.define('web.basic_model_tests', function (require) { assert.expect(3); var rpcCount = 0; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1773,7 +1773,7 @@ odoo.define('web.basic_model_tests', function (require) { assert.expect(5); var rpcCount = 0; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1812,7 +1812,7 @@ odoo.define('web.basic_model_tests', function (require) { assert.expect(5); var rpcCount = 0; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1857,7 +1857,7 @@ odoo.define('web.basic_model_tests', function (require) { assert.expect(4); var rpcCount = 0; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1888,7 +1888,7 @@ odoo.define('web.basic_model_tests', function (require) { assert.expect(2); let rpcCount = 0; - const model = createModel({ + const model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1916,7 +1916,7 @@ odoo.define('web.basic_model_tests', function (require) { this.data.partner.fields.product_id.context = "{'id': id, 'active_id': active_id, 'active_ids': active_ids, 'active_model': active_model}"; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -1949,7 +1949,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = ['category']; this.params.res_id = 1; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -1991,7 +1991,7 @@ odoo.define('web.basic_model_tests', function (require) { viewType: 'form', }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2011,7 +2011,7 @@ odoo.define('web.basic_model_tests', function (require) { assert.expect(2); this.data.partner.fields.foo.default = 'default'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2042,7 +2042,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.fieldNames = Object.keys(this.data.partner.fields); this.params.res_id = 1; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2095,7 +2095,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.viewType = 'form'; this.params.res_id = 1; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2133,7 +2133,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.groupedBy = []; this.params.res_id = undefined; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -2164,7 +2164,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; this.params.type = 'record'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route, args) { @@ -2196,7 +2196,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; this.params.type = 'record'; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2215,7 +2215,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = undefined; this.params.orderedBy = [{ name: 'display_name', asc: true }]; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, mockRPC: function (route) { @@ -2269,7 +2269,7 @@ odoo.define('web.basic_model_tests', function (require) { this.params.res_id = 1; this.params.fieldNames = ['foobool', 'foobool2']; this.params.fields = this.data.partner.fields; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2291,7 +2291,7 @@ odoo.define('web.basic_model_tests', function (require) { this.data.partner.records[1].product_ids = [37, 38]; this.params.fieldNames = ['product_ids']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2341,7 +2341,7 @@ odoo.define('web.basic_model_tests', function (require) { this.data.partner.records[1].product_ids = [37, 38]; this.params.fieldNames = ['product_ids']; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2401,7 +2401,7 @@ odoo.define('web.basic_model_tests', function (require) { }, }; - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); @@ -2448,7 +2448,7 @@ odoo.define('web.basic_model_tests', function (require) { QUnit.test('identify correct active field', async function(assert) { assert.expect(4); - var model = createModel({ + var model = await createModel({ Model: BasicModel, data: this.data, }); diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js index 7b69e8ce167..ba8c1f35dfd 100644 --- a/addons/web/static/tests/views/calendar_tests.js +++ b/addons/web/static/tests/views/calendar_tests.js @@ -2541,7 +2541,7 @@ QUnit.module('Views', { }); QUnit.test('check if the view destroys all widgets and instances', async function (assert) { - assert.expect(1); + assert.expect(2); var instanceNumber = 0; testUtils.mock.patch(mixins.ParentedMixin, { @@ -2579,21 +2579,10 @@ QUnit.module('Views', { }; var calendar = await createCalendarView(params); - calendar.destroy(); - - var initialInstanceNumber = instanceNumber; - instanceNumber = 0; - - calendar = await createCalendarView(params); - - // call destroy function of controller to ensure that it correctly destroys everything - calendar.__destroy(); - - // + 1 (parent) - assert.strictEqual(instanceNumber, initialInstanceNumber + 1, - "every widget must be destroyed exept the parent"); + assert.ok(instanceNumber > 0); calendar.destroy(); + assert.strictEqual(instanceNumber, 0); testUtils.mock.unpatch(mixins.ParentedMixin); }); diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 33bc3de7347..56fba6515bc 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -7706,7 +7706,7 @@ QUnit.module('Views', { }); QUnit.test('check if the view destroys all widgets and instances', async function (assert) { - assert.expect(1); + assert.expect(2); var instanceNumber = 0; await testUtils.mock.patch(mixins.ParentedMixin, { @@ -7766,21 +7766,10 @@ QUnit.module('Views', { }; var form = await createView(params); - form.destroy(); - - var initialInstanceNumber = instanceNumber; - instanceNumber = 0; - - form = await createView(params); - - // call destroy function of controller to ensure that it correctly destroys everything - form.__destroy(); - - // + 4 (parent) - assert.strictEqual(instanceNumber, initialInstanceNumber + 1, - "every widget must be destroyed exept the parent"); + assert.ok(instanceNumber > 0); form.destroy(); + assert.strictEqual(instanceNumber, 0); await testUtils.mock.unpatch(mixins.ParentedMixin); }); diff --git a/addons/web/static/tests/views/kanban_model_tests.js b/addons/web/static/tests/views/kanban_model_tests.js index 793a5749b46..2598f2bd676 100644 --- a/addons/web/static/tests/views/kanban_model_tests.js +++ b/addons/web/static/tests/views/kanban_model_tests.js @@ -67,7 +67,7 @@ QUnit.module('Views', { assert.expect(22); var calledRoutes = {}; - var model = createModel({ + var model = await createModel({ Model: KanbanModel, data: this.data, mockRPC: function (route) { @@ -132,7 +132,7 @@ QUnit.module('Views', { var done = assert.async(); assert.expect(4); - var model = createModel({ + var model = await createModel({ Model: KanbanModel, data: this.data, mockRPC: function (route, args) { @@ -173,7 +173,7 @@ QUnit.module('Views', { var done = assert.async(); assert.expect(2); - var model = createModel({ + var model = await createModel({ Model: KanbanModel, data: this.data, mockRPC: function (route, args) { @@ -210,7 +210,7 @@ QUnit.module('Views', { this.data.partner.records.push({id: 3, foo: 'aaa', product_id: 37}); var nbReseq = 0; - var model = createModel({ + var model = await createModel({ Model: KanbanModel, data: this.data, mockRPC: function (route, args) { @@ -270,7 +270,7 @@ QUnit.module('Views', { assert.expect(8); var self = this; - var model = createModel({ + var model = await createModel({ Model: KanbanModel, data: this.data, }); diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index 22c29168585..225826c8515 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -5420,7 +5420,7 @@ QUnit.module('Views', { }); QUnit.test('check if the view destroys all widgets and instances', async function (assert) { - assert.expect(1); + assert.expect(2); var instanceNumber = 0; testUtils.mock.patch(mixins.ParentedMixin, { @@ -5457,21 +5457,10 @@ QUnit.module('Views', { }; var kanban = await createView(params); - kanban.destroy(); - - var initialInstanceNumber = instanceNumber; - instanceNumber = 0; - - kanban = await createView(params); - - // call destroy function of controller to ensure that it correctly destroys everything - kanban.__destroy(); - - // + 1 (parent) - assert.strictEqual(instanceNumber, initialInstanceNumber + 1, - "every widget must be destroyed exept the parent"); + assert.ok(instanceNumber > 0); kanban.destroy(); + assert.strictEqual(instanceNumber, 0); testUtils.mock.unpatch(mixins.ParentedMixin); }); diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js index d69aef904c1..67c1a7962a0 100644 --- a/addons/web/static/tests/views/list_tests.js +++ b/addons/web/static/tests/views/list_tests.js @@ -7409,7 +7409,7 @@ QUnit.module('Views', { }); QUnit.test('check if the view destroys all widgets and instances', async function (assert) { - assert.expect(1); + assert.expect(2); var instanceNumber = 0; testUtils.mock.patch(mixins.ParentedMixin, { @@ -7446,21 +7446,10 @@ QUnit.module('Views', { }; var list = await createView(params); - list.destroy(); - - var initialInstanceNumber = instanceNumber; - instanceNumber = 0; - - list = await createView(params); - - // call destroy function of controller to ensure that it correctly destroys everything - list.__destroy(); - - // + 1 (parent) - assert.strictEqual(instanceNumber, initialInstanceNumber + 1, - "every widget must be destroyed exept the parent"); + assert.ok(instanceNumber > 0); list.destroy(); + assert.strictEqual(instanceNumber, 0); testUtils.mock.unpatch(mixins.ParentedMixin); }); diff --git a/addons/web/static/tests/widgets/company_switcher_tests.js b/addons/web/static/tests/widgets/company_switcher_tests.js index 6b3ead230ca..fe0fec5e6c2 100644 --- a/addons/web/static/tests/widgets/company_switcher_tests.js +++ b/addons/web/static/tests/widgets/company_switcher_tests.js @@ -9,7 +9,7 @@ async function createSwitchCompanyMenu(params) { params = params || {}; var target = params.debug ? document.body : $('#qunit-fixture'); var menu = new SwitchCompanyMenu(); - testUtils.mock.addMockEnvironment(menu, params); + await testUtils.mock.addMockEnvironment(menu, params); await menu.appendTo(target) return menu } diff --git a/addons/web/static/tests/widgets/domain_selector_tests.js b/addons/web/static/tests/widgets/domain_selector_tests.js index 8c246fd8399..a587117f95a 100644 --- a/addons/web/static/tests/widgets/domain_selector_tests.js +++ b/addons/web/static/tests/widgets/domain_selector_tests.js @@ -60,7 +60,7 @@ QUnit.module('DomainSelector', { readonly: false, debugMode: true, }); - testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); await domainSelector.appendTo($target); // As we gave an empty domain, there should be a visible button to add @@ -161,7 +161,7 @@ QUnit.module('DomainSelector', { var domainSelector = new DomainSelector(null, "partner", [["nice_datetime", "=", "2017-03-27 15:42:00"]], { readonly: false, }); - testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); await domainSelector.appendTo($target); // Check that there is a datepicker to choose the date @@ -189,7 +189,7 @@ QUnit.module('DomainSelector', { debugMode: true, readonly: false, }); - testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); await domainSelector.appendTo($target); await testUtils.fields.editAndTrigger(domainSelector.$('.o_domain_leaf_value_input'), @@ -210,7 +210,7 @@ QUnit.module('DomainSelector', { debugMode: true, readonly: false, }); - testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); await domainSelector.appendTo($target); assert.strictEqual(domainSelector.$el.text(), "This domain is not supported.", @@ -230,7 +230,7 @@ QUnit.module('DomainSelector', { debugMode: true, default: [["foo","=","kikou"]], }); - testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(domainSelector, {data: this.data}); await domainSelector.appendTo($target); // Clicking on the button should add a visible field selector in the diff --git a/addons/web/static/tests/widgets/model_field_selector_tests.js b/addons/web/static/tests/widgets/model_field_selector_tests.js index 75580e09df3..69bb1eb9314 100644 --- a/addons/web/static/tests/widgets/model_field_selector_tests.js +++ b/addons/web/static/tests/widgets/model_field_selector_tests.js @@ -59,7 +59,7 @@ QUnit.module('ModelFieldSelector', { readonly: false, debugMode: true, }); - testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); await fieldSelector.appendTo($target); var $value = fieldSelector.$("> .o_field_selector_value"); @@ -182,7 +182,7 @@ QUnit.module('ModelFieldSelector', { readonly: false, debugMode: true, }); - testUtils.addMockEnvironment(fieldSelector, {data: this.data}); + await testUtils.addMockEnvironment(fieldSelector, {data: this.data}); await fieldSelector.appendTo($target); // Focusing the field selector input should open a field selector popover @@ -215,7 +215,7 @@ QUnit.module('ModelFieldSelector', { return field.type === 'many2one'; }, }); - testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); await fieldSelector.appendTo($target); fieldSelector.$el.trigger('focusin'); @@ -237,7 +237,7 @@ QUnit.module('ModelFieldSelector', { var fieldSelector = new ModelFieldSelector(null, "partner", [], { readonly: false, }); - testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); await fieldSelector.appendTo($target); fieldSelector.$el.trigger('focusin'); @@ -269,7 +269,7 @@ QUnit.module('ModelFieldSelector', { readonly: false, showSearchInput: false, }); - testUtils.mock.addMockEnvironment(fieldSelector, { data: this.data }); + await testUtils.mock.addMockEnvironment(fieldSelector, { data: this.data }); await fieldSelector.appendTo($target); fieldSelector.$el.trigger('focusin'); @@ -291,7 +291,7 @@ QUnit.module('ModelFieldSelector', { readonly: false, showSearchInput: false, }); - testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); await fieldSelector.appendTo($target); var $fieldName = fieldSelector.$('.o_field_selector_chain_part'); @@ -311,7 +311,7 @@ QUnit.module('ModelFieldSelector', { readonly: false, showSearchInput: false, }); - testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); + await testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); await fieldSelector.appendTo($target); var $fieldName = fieldSelector.$('.o_field_selector_chain_part'); diff --git a/addons/web_editor/static/tests/test_utils.js b/addons/web_editor/static/tests/test_utils.js index 8b28e292438..9cd3249f953 100644 --- a/addons/web_editor/static/tests/test_utils.js +++ b/addons/web_editor/static/tests/test_utils.js @@ -293,12 +293,12 @@ function wysiwygData(data) { * * @param {object} params */ -function createWysiwyg(params) { +async function createWysiwyg(params) { patch(); params.data = wysiwygData(params.data); var parent = new Widget(); - testUtils.mock.addMockEnvironment(parent, params); + await testUtils.mock.addMockEnvironment(parent, params); var wysiwygOptions = _.extend({}, params.wysiwygOptions, { recordInfo: { diff --git a/addons/web_tour/static/tests/tour_manager_tests.js b/addons/web_tour/static/tests/tour_manager_tests.js index 79ce4c0ceb5..14802f9086f 100644 --- a/addons/web_tour/static/tests/tour_manager_tests.js +++ b/addons/web_tour/static/tests/tour_manager_tests.js @@ -20,7 +20,7 @@ odoo.define('web_tour.tour_manager_tests', async function (require) { * @param {Object[]} params.tours { {string} name, {Object} option, {Object[]} steps } */ async function createTourManager({ consumed_tours, debug, template, tours }) { - const parent = testUtils.createParent({ debug }); + const parent = await testUtils.createParent({ debug }); const tourManager = new TourManager(parent, consumed_tours); tourManager.running_step_delay = 0; for (const { name, options, steps } of tours) {