From 9f45e8970c7ec23d44e24d86853efc8e66d103c0 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 25 Feb 2013 16:23:24 +0100 Subject: [PATCH 1/3] [ADD] more tests for m2o default values handling bzr revid: xmo@openerp.com-20130225152324-785ewucir0pv4rmw --- addons/web/static/test/search.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 292954b1992..5ba528a1506 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -318,6 +318,28 @@ openerp.testing.section('defaults', { "facet value should match provided default's selection"); }); }); + test("M2O default: value array", {asserts: 2}, function (instance, $s, mock) { + var view = {inputs: []}, id = 5; + var f = new instance.web.search.ManyToOneField( + {attrs: {name: 'dummy', string: 'Dummy'}}, + {relation: 'dummy.model.name'}, + view); + mock('dummy.model.name:name_get', function (args) { + equal(args[0], id); + return [[id, "DumDumDum"]]; + }); + return f.facet_for_defaults({dummy: [id]}) + .done(function (facet) { + var model = facet; + if (!(model instanceof instance.web.search.Facet)) { + model = new instance.web.search.Facet(facet); + } + deepEqual( + model.values.toJSON(), + [{label: "DumDumDum", value: id}], + "should support default as a singleton"); + }); + }); test("M2O default: value", {asserts: 1}, function (instance, $s, mock) { var view = {inputs: []}, id = 4; var f = new instance.web.search.ManyToOneField( @@ -330,6 +352,15 @@ openerp.testing.section('defaults', { ok(!facet, "an invalid m2o default should yield a non-facet"); }); }); + test("M2O default: values", {rpc: false}, function (instance) { + var view = {inputs: []}; + var f = new instance.web.search.ManyToOneField( + {attrs: {name: 'dummy', string: 'Dummy'}}, + {relation: 'dummy.model.name'}, + view); + raises(function () { f.facet_for_defaults({dummy: [6, 7]}) }, + "should not accept multiple default values"); + }) }); openerp.testing.section('completions', { dependencies: ['web.search'], From ece114024f1e91c0f858821c43f9b8574488357e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 25 Feb 2013 17:42:55 +0100 Subject: [PATCH 2/3] [ADD] @domains handling to searchview m2o field during completion bzr revid: xmo@openerp.com-20130225164255-y3qkcjozr7rbtz1v --- addons/web/static/src/js/search.js | 2 ++ addons/web/static/test/search.js | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index f2fa63d38d3..44b8c61b9a6 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1477,6 +1477,8 @@ instance.web.search.ManyToOneField = instance.web.search.CharField.extend({ // FIXME: "concurrent" searches (multiple requests, mis-ordered responses) return this.model.call('name_search', [], { name: needle, + args: instance.web.pyeval.eval( + 'domains', this.attrs.domain ? [this.attrs.domain] : []), limit: 8, context: {} }).then(function (results) { diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 5ba528a1506..83e6ff1c178 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -594,6 +594,23 @@ openerp.testing.section('completions', { ok(!c, "no match should yield no completion"); }); }); + test("M2O filtered", {asserts: 2}, function (instance, $s, mock) { + mock('dummy.model:name_search', function (args, kwargs) { + deepEqual(args, [], "should have no positional arguments"); + deepEqual(kwargs, { + name: 'bob', + limit: 8, + args: [['foo', '=', 'bar']], + context: {}, + }, "should use filtering domain"); + return [[42, "Match"]]; + }); + var view = {inputs: []}; + var f = new instance.web.search.ManyToOneField( + {attrs: {string: 'Dummy', domain: '[["foo", "=", "bar"]]'}}, + {relation: 'dummy.model'}, view); + return f.complete("bob"); + }); }); openerp.testing.section('search-serialization', { dependencies: ['web.search'], From 6803c0048f6d7447ca4ba84e1a9e52f2aedbdb33 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 25 Feb 2013 17:52:36 +0100 Subject: [PATCH 3/3] [IMP] add view's context to m2o completion name_search bzr revid: xmo@openerp.com-20130225165236-386r8438h4vz6fav --- addons/web/static/src/js/search.js | 7 ++++--- addons/web/static/test/search.js | 11 +++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 44b8c61b9a6..36f766407b7 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1473,14 +1473,15 @@ instance.web.search.ManyToOneField = instance.web.search.CharField.extend({ }, complete: function (needle) { var self = this; - // TODO: context // FIXME: "concurrent" searches (multiple requests, mis-ordered responses) + var context = instance.web.pyeval.eval( + 'contexts', [this.view.dataset.get_context()]); return this.model.call('name_search', [], { name: needle, args: instance.web.pyeval.eval( - 'domains', this.attrs.domain ? [this.attrs.domain] : []), + 'domains', this.attrs.domain ? [this.attrs.domain] : [], context), limit: 8, - context: {} + context: context }).then(function (results) { if (_.isEmpty(results)) { return null; } return [{label: self.attrs.string}].concat( diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 83e6ff1c178..904af63f590 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -557,7 +557,7 @@ openerp.testing.section('completions', { return [[42, "choice 1"], [43, "choice @"]]; }); - var view = {inputs: []}; + var view = {inputs: [], dataset: {get_context: function () {}}}; var f = new instance.web.search.ManyToOneField( {attrs: {string: 'Dummy'}}, {relation: 'dummy.model'}, view); return f.complete("bob") @@ -586,7 +586,7 @@ openerp.testing.section('completions', { strictEqual(kwargs.name, 'bob'); return []; }); - var view = {inputs: []}; + var view = {inputs: [], dataset: {get_context: function () {}}}; var f = new instance.web.search.ManyToOneField( {attrs: {string: 'Dummy'}}, {relation: 'dummy.model'}, view); return f.complete("bob") @@ -601,11 +601,14 @@ openerp.testing.section('completions', { name: 'bob', limit: 8, args: [['foo', '=', 'bar']], - context: {}, + context: {flag: 1}, }, "should use filtering domain"); return [[42, "Match"]]; }); - var view = {inputs: []}; + var view = { + inputs: [], + dataset: {get_context: function () { return {flag: 1}; }} + }; var f = new instance.web.search.ManyToOneField( {attrs: {string: 'Dummy', domain: '[["foo", "=", "bar"]]'}}, {relation: 'dummy.model'}, view);