[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:
committed by
Nicolas Martinelli
parent
63cd67b0ec
commit
e703d07e68
@@ -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),
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user