[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:
@@ -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'],
|
||||
|
||||
Reference in New Issue
Block a user