[FIX] web: no error on single active_ids state load

In eg. 13.0 when refreshing sales analysis action of a product, we would
get an error because we have a single active_ids which is not expected
by the code.

With this commit, we use .toString() on the jQuery BBQ parsed active_ids
as it was done before 32b8cec5 refactoring (january 2018).

The added test with the fix fails with an error:

  TypeError: state.active_ids.split is not a function
  at Class.loadState (/web/static/src/js/chrome/action_manager_act_window.js)

opw-2471982

closes odoo/odoo#70285

X-original-commit: bf9a985f4b62cc6f1eef4f9fcca2a8dfbd453004
Signed-off-by: Nicolas Lempereur (nle) <nle@odoo.com>
Signed-off-by: pvh-odoo <SwagSamaSempai@users.noreply.github.com>
Co-authored-by: Nicolas Lempereur <nle@odoo.com>
This commit is contained in:
Philémon van Helden
2021-05-03 18:01:10 +00:00
committed by Nicolas Lempereur
co-authored by Nicolas Lempereur
parent b80e214780
commit 1d3c886b95
2 changed files with 21 additions and 1 deletions
@@ -86,7 +86,7 @@ ActionManager.include({
// jQuery's BBQ plugin does some parsing on values that are valid integers
// which means that if there's only one item, it will do parseInt() on it,
// otherwise it will keep the comma seperated list as string
context.active_ids = state.active_ids.split(',').map(function (id) {
context.active_ids = state.active_ids.toString().split(',').map(function (id) {
return parseInt(id, 10) || id;
});
} else if (state.active_id) {
@@ -1342,6 +1342,26 @@ QUnit.module('ActionManager', {
actionManager.destroy();
});
QUnit.test('state with integer active_ids should not crash', async function (assert) {
assert.expect(0);
var actionManager = await createActionManager({
actions: this.actions,
mockRPC: function (route, args) {
if (route === '/web/action/run') {
return Promise.resolve();
}
return this._super.apply(this, arguments);
},
});
await actionManager.loadState({
action: 2,
active_ids: 3,
});
actionManager.destroy();
});
QUnit.module('Concurrency management');
QUnit.test('drop previous actions if possible', async function (assert) {