diff --git a/addons/web/static/src/js/core/rpc.js b/addons/web/static/src/js/core/rpc.js index 6ad91c0e4f9..53d298c9019 100644 --- a/addons/web/static/src/js/core/rpc.js +++ b/addons/web/static/src/js/core/rpc.js @@ -51,9 +51,15 @@ return { } if (options.method === 'read_group') { - params.kwargs.domain = options.domain || params.domain || params.kwargs.domain || []; - params.kwargs.fields = options.fields || params.fields || params.kwargs.fields || []; - params.kwargs.groupby = options.groupBy || params.groupBy || params.kwargs.groupby || []; + if (!(params.args && params.args[0] !== undefined)) { + params.kwargs.domain = options.domain || params.domain || params.kwargs.domain || []; + } + if (!(params.args && params.args[1] !== undefined)) { + params.kwargs.fields = options.fields || params.fields || params.kwargs.fields || []; + } + if (!(params.args && params.args[2] !== undefined)) { + params.kwargs.groupby = options.groupBy || params.groupBy || params.kwargs.groupby || []; + } params.kwargs.offset = options.offset || params.offset || params.kwargs.offset; params.kwargs.limit = options.limit || params.limit || params.kwargs.limit; // In kwargs, we look for "orderby" rather than "orderBy" (note the absence of capital B), diff --git a/addons/web/static/tests/core/rpc_tests.js b/addons/web/static/tests/core/rpc_tests.js index 3b7fc006b02..06763e38f0d 100644 --- a/addons/web/static/tests/core/rpc_tests.js +++ b/addons/web/static/tests/core/rpc_tests.js @@ -243,6 +243,47 @@ QUnit.module('core', {}, function () { assert.deepEqual(query.params.kwargs.lazy, undefined, "should not enforce a default value for lazy"); }); + QUnit.test('read_group with args and kwargs', function (assert) { + assert.expect(9); + var query = rpc.buildQuery({ + model: 'partner', + method: 'read_group', + kwargs: { + domain: ['name', '=', 'saucisse'], + fields: ['category_id'], + groupby: ['country_id'], + }, + }); + + assert.deepEqual(query.params.kwargs.domain, ['name', '=', 'saucisse'], "should have ['name', '=', 'saucisse'] category_id as default domain"); + assert.deepEqual(query.params.kwargs.fields, ['category_id'], "should have category_id as default fields"); + assert.deepEqual(query.params.kwargs.groupby, ['country_id'], "should have country_id as default groupby"); + + var query = rpc.buildQuery({ + model: 'partner', + method: 'read_group', + args: [['name', '=', 'saucisse']], + kwargs: { + fields: ['category_id'], + groupby: ['country_id'], + }, + }); + + assert.deepEqual(query.params.kwargs.domain, undefined, "should not enforce a default value for domain"); + assert.deepEqual(query.params.kwargs.fields, ['category_id'], "should have category_id as default fields"); + assert.deepEqual(query.params.kwargs.groupby, ['country_id'], "should have country_id as default groupby"); + + var query = rpc.buildQuery({ + model: 'partner', + method: 'read_group', + args: [['name', '=', 'saucisse'], ['category_id'], ['country_id']], + }); + + assert.deepEqual(query.params.kwargs.domain, undefined, "should not enforce a default value for domain"); + assert.deepEqual(query.params.kwargs.fields, undefined, "should not enforce a default value for fields"); + assert.deepEqual(query.params.kwargs.groupby, undefined, "should not enforce a default value for groupby"); + }); + QUnit.test('search_read with no domain, nor fields', function (assert) { assert.expect(5); var query = rpc.buildQuery({