diff --git a/addons/web/static/src/js/views/search/search_inputs.js b/addons/web/static/src/js/views/search/search_inputs.js index d92616cfe3e..efdacca9dc8 100644 --- a/addons/web/static/src/js/views/search/search_inputs.js +++ b/addons/web/static/src/js/views/search/search_inputs.js @@ -676,6 +676,9 @@ var FilterGroup = Input.extend(/** @lends instance.web.search.FilterGroup# */{ .without('[]') .reject(_.isEmpty) .map(function (domain) { + if (typeof domain !== 'string') { + domain = JSON.stringify(domain); + } domain = domain.replace(/%%/g, '%'); return domain; }) diff --git a/addons/web/static/tests/views/search_view_tests.js b/addons/web/static/tests/views/search_view_tests.js index 5d58e8d9cde..3e1070c4088 100644 --- a/addons/web/static/tests/views/search_view_tests.js +++ b/addons/web/static/tests/views/search_view_tests.js @@ -649,6 +649,37 @@ QUnit.module('Search View', { window.Date = RealDate; }); + QUnit.test('Filter with JSON-parsable domain works', function (assert) { + assert.expect(1); + + var domain = [['foo' ,'=', 'Gently Weeps']]; + var xml_domain = JSON.stringify(domain); + + var actionManager = createActionManager({ + actions: this.actions, + archs: this.archs, + data: this.data, + mockRPC: function (route, args) { + if (route === '/web/dataset/search_read') { + assert.deepEqual(args.domain, domain, + 'A JSON parsable xml domain should be handled just like any other'); + } + return this._super.apply(this, arguments); + } + }); + + this.archs['partner,5,search'] = + ''+ + '' + + ''; + this.actions[0].search_view_id = [5, 'search']; + this.actions[0].context = {search_default_gently_weeps: true}; + + actionManager.doAction(1); + + actionManager.destroy(); + }); + QUnit.module('Favorites Menu'); QUnit.test('dynamic filters are saved dynamic', function (assert) {