[FIX] web: read_group RPC

Example of failing request:
```
rpc.query({
    model: 'link.tracker.click',
    method: 'read_group',
    args: [[links_domain, ['create_date', '>', interval]], ['country_id']],
    kwargs: {groupby:'country_id'},
});
```

The RPC request built contains the following:
```
args: [[["link_id", "=", 1]], ["create_date"]]
kwargs: {groupby: "create_date:day", domain: [], fields: []}
```

This will be interpreted server side as:
```
model.read_group([['link_id', '=', 1]], ['create_date'], groupby=['create_date:day'], domain=[], fields=[])
```

2 arguments match `domain` and `fields`, which causes a crash.

opw-781300
This commit is contained in:
Nicolas Martinelli
2017-11-24 14:16:13 +01:00
committed by Nicolas Martinelli
parent 63cd67b0ec
commit e703d07e68
2 changed files with 50 additions and 3 deletions
+9 -3
View File
@@ -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),
+41
View File
@@ -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({