diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 36f766407b7..975e9ef034b 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1680,6 +1680,13 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({ if (!_.isEmpty(results.group_by)) { results.context.group_by = results.group_by; } + // Don't save user_context keys in the custom filter, otherwise end + // up with e.g. wrong uid or lang stored *and used in subsequent + // reqs* + var ctx = results.context; + _(_.keys(instance.session.user_context)).each(function (key) { + delete ctx[key]; + }); var filter = { name: $name.val(), user_id: private_filter ? instance.session.uid : false, diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 904af63f590..bc2ac90741a 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -1127,6 +1127,28 @@ openerp.testing.section('saved_filters', { "should have selected second filter"); }); }); + test('creation', {asserts: 2}, function (instance, $fix, mock) { + // force a user context + instance.session.user_context = {foo: 'bar'}; + + var view = makeSearchView(instance); + var done = $.Deferred(); + mock('ir.filters:get_filters', function () { return []; }); + mock('ir.filters:create_or_replace', function (args) { + var filter = args[0]; + deepEqual(filter.context, {}, "should have empty context"); + deepEqual(filter.domain, [], "should have empty domain"); + done.resolve(); + }); + return view.appendTo($fix) + .then(function () { + $fix.find('.oe_searchview_custom input#oe_searchview_custom_input') + .text("filter name") + .end() + .find('.oe_searchview_custom button').click(); + return done.promise(); + }); + }); }); openerp.testing.section('advanced', { dependencies: ['web.search'],