odoo.define('web.action_manager_mobile_tests', function (require) { "use strict"; var testUtils = require('web.test_utils'); var createActionManager = testUtils.createActionManager; QUnit.module('ActionManager', { beforeEach: function () { this.data = { partner: { fields: { foo: {string: "Foo", type: "char"}, }, records: [ {id: 1, display_name: "First record", foo: "yop"}, ], }, }; this.actions = [{ id: 1, name: 'Partners Action 1', res_model: 'partner', type: 'ir.actions.act_window', views: [[false, 'list'], [false, 'kanban'], [false, 'form']], }, { id: 2, name: 'Partners Action 2', res_model: 'partner', type: 'ir.actions.act_window', views: [[false, 'list'], [false, 'form']], }]; this.archs = { // kanban views 'partner,false,kanban': '' + '
' + '
', // list views 'partner,false,list': '', // form views 'partner,false,form': '
' + '' + '' + '' + '
', // search views 'partner,false,search': '', }; }, }, function () { QUnit.test('uses a mobile-friendly view by default (if possible)', async function (assert) { assert.expect(4); var actionManager = await createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); // should default on a mobile-friendly view (kanban) for action 1 await actionManager.doAction(1); assert.containsNone(actionManager, '.o_list_view'); assert.containsOnce(actionManager, '.o_kanban_view'); // there is no mobile-friendly view for action 2, should use the first one (list) await actionManager.doAction(2); assert.containsOnce(actionManager, '.o_list_view'); assert.containsNone(actionManager, '.o_kanban_view'); actionManager.destroy(); }); QUnit.test('lazy load mobile-friendly view', async function (assert) { assert.expect(11); var actionManager = await createActionManager({ actions: this.actions, archs: this.archs, data: this.data, mockRPC: function (route, args) { assert.step(args.method || route); return this._super.apply(this, arguments); }, }); await actionManager.loadState({ action: 1, view_type: 'form', }); assert.containsNone(actionManager, '.o_list_view'); assert.containsNone(actionManager, '.o_kanban_view'); assert.containsOnce(actionManager, '.o_form_view'); // go back to lazy loaded view await testUtils.dom.click(actionManager.$('.o_control_panel .breadcrumb .breadcrumb-item:first')); assert.containsNone(actionManager, '.o_form_view'); assert.containsNone(actionManager, '.o_list_view'); assert.containsOnce(actionManager, '.o_kanban_view'); assert.verifySteps([ '/web/action/load', 'load_views', 'default_get', // default_get to open form view '/web/dataset/search_read', // search read when coming back to Kanban ]); actionManager.destroy(); }); QUnit.test('view switcher button should be displayed in dropdown on mobile screens', async function (assert) { assert.expect(3); var actionManager = await createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); await actionManager.doAction(1); assert.containsOnce(actionManager.$('.o_control_panel'), '.o_cp_switch_buttons button[data-toggle="dropdown"]'); assert.hasClass(actionManager.$('.o_cp_switch_buttons .o_cp_switch_kanban'), 'active'); assert.hasClass(actionManager.$('.o_cp_switch_buttons .o_switch_view_button_icon'), 'fa-th-large'); actionManager.destroy(); }); }); });