[FIX] searches with filters using "empty" domain/context values (but not attributes)
e.g. @domain="[]" would be seen as non-empty by the search view, and if multiple domains the search view would generate a nonliteral ``['|', '[]', '[]]`` which would just yield ``['|']`` after evaluation and concatenation, which is an invalid domain and would blow up the server. Specifically filter out the values ``[]`` and ``{}`` from filters bzr revid: xmo@openerp.com-20121129112413-yrgncnesqs093jwf
This commit is contained in:
parent
a2b23a1ca7
commit
fe3d493cc8
|
@ -1009,6 +1009,7 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in
|
|||
get_context: function (facet) {
|
||||
var contexts = facet.values.chain()
|
||||
.map(function (f) { return f.get('value').attrs.context; })
|
||||
.without('{}')
|
||||
.reject(_.isEmpty)
|
||||
.value();
|
||||
|
||||
|
@ -1027,6 +1028,7 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in
|
|||
get_groupby: function (facet) {
|
||||
return facet.values.chain()
|
||||
.map(function (f) { return f.get('value').attrs.context; })
|
||||
.without('{}')
|
||||
.reject(_.isEmpty)
|
||||
.value();
|
||||
},
|
||||
|
@ -1039,6 +1041,7 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in
|
|||
get_domain: function (facet) {
|
||||
var domains = facet.values.chain()
|
||||
.map(function (f) { return f.get('value').attrs.domain; })
|
||||
.without('[]')
|
||||
.reject(_.isEmpty)
|
||||
.value();
|
||||
|
||||
|
|
|
@ -845,6 +845,42 @@ openerp.testing.section('search-serialization', {
|
|||
ok(!context.get_eval_context(), "context should have no evaluation context");
|
||||
});
|
||||
});
|
||||
test('Empty filter domains', {asserts: 4}, function (instance) {
|
||||
var view = {inputs: [], query: {on: function () {}}};
|
||||
var filter_a = new instance.web.search.Filter(
|
||||
{attrs: {name: 'a', context: '{}', domain: '[]'}}, view);
|
||||
var filter_b = new instance.web.search.Filter(
|
||||
{attrs: {name: 'b', context: '{}', domain: '[]'}}, view);
|
||||
var filter_c = new instance.web.search.Filter(
|
||||
{attrs: {name: 'c', context: '{b: 42}', domain: '[["a", "=", 3]]'}}, view);
|
||||
var group = new instance.web.search.FilterGroup(
|
||||
[filter_a, filter_b, filter_c], view);
|
||||
var t1 = group.facet_for_defaults({a: true, c: true})
|
||||
.done(function (facet) {
|
||||
var model = facet;
|
||||
if (!(model instanceof instance.web.search.Facet)) {
|
||||
model = new instance.web.search.Facet(facet);
|
||||
}
|
||||
|
||||
var domain = group.get_domain(model);
|
||||
deepEqual(domain, '[["a", "=", 3]]', "domain should ignore empties");
|
||||
var context = group.get_context(model);
|
||||
deepEqual(context, '{b: 42}', "context should ignore empties");
|
||||
});
|
||||
var t2 = group.facet_for_defaults({a: true, b: true})
|
||||
.done(function (facet) {
|
||||
var model = facet;
|
||||
if (!(model instanceof instance.web.search.Facet)) {
|
||||
model = new instance.web.search.Facet(facet);
|
||||
}
|
||||
|
||||
var domain = group.get_domain(model);
|
||||
equal(domain, null, "domain should ignore empties");
|
||||
var context = group.get_context(model);
|
||||
equal(context, null, "context should ignore empties");
|
||||
});
|
||||
return $.when(t1, t2);
|
||||
});
|
||||
});
|
||||
openerp.testing.section('removal', {
|
||||
dependencies: ['web.search'],
|
||||
|
|
Loading…
Reference in New Issue