From cf6697dfbd00a458cb56caf57a0d359310690f55 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Mon, 22 Jan 2018 10:56:32 +0100 Subject: [PATCH] [FIX] web: ActionManager: honor action's groupBy Before this rev., the group_by specified in the action context was completely overridden by the group_by specified in the search view, even if it was []. In other words, it was completely ignored. Moreover, it was only took into account (before being overridden) at the first load of a view, not at reload. --- .../js/chrome/action_manager_act_window.js | 9 ++-- .../tests/chrome/action_manager_tests.js | 51 +++++++++++++++++-- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/addons/web/static/src/js/chrome/action_manager_act_window.js b/addons/web/static/src/js/chrome/action_manager_act_window.js index 04322237d7a..1410063dcca 100644 --- a/addons/web/static/src/js/chrome/action_manager_act_window.js +++ b/addons/web/static/src/js/chrome/action_manager_act_window.js @@ -302,10 +302,6 @@ ActionManager.include({ * @returns {Object} */ _generateActionEnv: function (action, options) { - var actionGroupBy = action.context.group_by || []; - if (typeof actionGroupBy === 'string') { - actionGroupBy = [actionGroupBy]; - } var resID = options.resID || action.res_id; return { modelName: action.res_model, @@ -313,7 +309,7 @@ ActionManager.include({ currentId: resID || undefined, domain: [], context: action.context || {}, - groupBy: actionGroupBy, + groupBy: [], }; }, /** @@ -444,10 +440,11 @@ ActionManager.include({ throw new Error(_.str.sprintf(_t("Failed to evaluate search criterions")+": \n%s", JSON.stringify(results.error))); } + var groupBy = results.group_by.length ? results.group_by : (action.context.group_by || []); return { context: results.context, domain: results.domain, - groupBy: results.group_by, + groupBy: (typeof groupBy === 'string') ? [groupBy] : groupBy, }; }, /** diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js index 28fed6fb2d5..eaadcdc180a 100644 --- a/addons/web/static/tests/chrome/action_manager_tests.js +++ b/addons/web/static/tests/chrome/action_manager_tests.js @@ -18,11 +18,11 @@ QUnit.module('ActionManager', { bar: {string: "Bar", type: "many2one", relation: 'partner'}, }, records: [ - {id: 1, display_name: "First record", foo: "yop"}, - {id: 2, display_name: "Second record", foo: "blip"}, - {id: 3, display_name: "Third record", foo: "gnap"}, - {id: 4, display_name: "Fourth record", foo: "plop"}, - {id: 5, display_name: "Fifth record", foo: "zoup"}, + {id: 1, display_name: "First record", foo: "yop", bar: 2}, + {id: 2, display_name: "Second record", foo: "blip", bar: 1}, + {id: 3, display_name: "Third record", foo: "gnap", bar: 1}, + {id: 4, display_name: "Fourth record", foo: "plop", bar: 2}, + {id: 5, display_name: "Fifth record", foo: "zoup", bar: 2}, ], }, pony: { @@ -2223,6 +2223,47 @@ QUnit.module('ActionManager', { actionManager.destroy(); }); + QUnit.test('honor group_by specified in actions context', function (assert) { + assert.expect(5); + + _.findWhere(this.actions, {id: 3}).context = "{'group_by': 'bar'}"; + this.archs['partner,false,search'] = ''+ + ''+ + '' + + ''+ + ''; + + var actionManager = createActionManager({ + actions: this.actions, + archs: this.archs, + data: this.data, + }); + actionManager.doAction(3); + + assert.strictEqual(actionManager.$('.o_list_view_grouped').length, 1, + "should be grouped"); + assert.strictEqual(actionManager.$('.o_group_header').length, 2, + "should be grouped by 'bar' (two groups) at first load"); + + // groupby 'bar' using the searchview + $('.o_control_panel .o_searchview_more').click(); // open search view sub menus + $('.o_control_panel .o_cp_right button:contains(Group By)').click(); // open groupby dropdown + $('.o_control_panel .o_group_by_menu a:first').click(); // click on 'Foo' + + assert.strictEqual(actionManager.$('.o_group_header').length, 5, + "should be grouped by 'foo' (five groups)"); + + // remove the groupby in the searchview + $('.o_control_panel .o_searchview .o_facet_remove').click(); + + assert.strictEqual(actionManager.$('.o_list_view_grouped').length, 1, + "should still be grouped"); + assert.strictEqual(actionManager.$('.o_group_header').length, 2, + "should be grouped by 'bar' (two groups) at reload"); + + actionManager.destroy(); + }); + QUnit.module('Actions in target="new"'); QUnit.test('can execute act_window actions in target="new"', function (assert) {