From 2591fa5e1e03e1d3ec32f27b23abf22567e269a5 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 26 Apr 2012 12:29:49 +0200 Subject: [PATCH] [FIX] missing state propagation in searchview initialization, test defaults calling on fields bzr revid: xmo@openerp.com-20120426102949-xtv3inug3sue0h6a --- addons/web/static/src/js/search.js | 17 +++++- addons/web/static/test/search.js | 89 ++++++++++++++++++++++++++++++ addons/web/static/test/test.html | 2 +- 3 files changed, 106 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 4c1862365ca..6f02a8d9934 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -38,6 +38,18 @@ my.Facet = Backbone.Model.extend({ return Backbone.Model.prototype.set.call(this, key, value); } this.values.reset(value); + }, + toJSON: function () { + var out = {}; + var attrs = this.attributes; + for(var att in attrs) { + if (!attrs.hasOwnProperty(att) || att === 'field') { + continue; + } + out[att] = attrs[att]; + } + out.values = this.values.toJSON(); + return out; } }); my.SearchQuery = Backbone.Collection.extend({ @@ -215,7 +227,10 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea $.when(load_view, filters) .pipe(function (load) { return load[0]; }) - .then(this.on_loaded); + .pipe(this.on_loaded) + .fail(function () { + self.ready.reject.apply(null, arguments); + }); } this.$element.on('click', '.oe_searchview_unfold_drawer', function () { diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 7403afb5d0d..f53e4cd294a 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -1,4 +1,9 @@ $(document).ready(function () { + var xhr = QWeb2.Engine.prototype.get_xhr(); + xhr.open('GET', '/web/static/src/xml/base.xml', false); + xhr.send(null); + var doc = xhr.responseXML; + var instance; module('query', { setup: function () { @@ -140,4 +145,88 @@ $(document).ready(function () { {label: 'V2', value: 1} ]) }); + + module('defaults', { + setup: function () { + instance = window.openerp.init([]); + window.openerp.web.corelib(instance); + window.openerp.web.coresetup(instance); + window.openerp.web.chrome(instance); + window.openerp.web.data(instance); + window.openerp.web.search(instance); + + instance.web.qweb.add_template(doc); + + instance.connection.responses = {}; + instance.connection.rpc_function = function (url, payload) { + if (!(url.url in this.responses)) { + return $.Deferred().reject( + {}, 'failed', + _.str.sprintf("Url %s not found in mock responses", + url.url)).promise(); + } + return $.when(this.responses[url.url](payload)); + }; + } + }); + asyncTest('defaults calling', 2, function () { + var defaults_called = false; + + instance.web.search.fields.add( + 'dummy', 'instance.dummy.DummyWidget'); + instance.dummy = {}; + instance.dummy.DummyWidget = instance.web.search.Field.extend({ + facet_for_defaults: function (defaults) { + defaults_called = true; + return $.when({ + field: this, + category: 'Dummy', + values: [{label: 'dummy', value: defaults.dummy}] + }); + } + }); + instance.connection.responses['/web/searchview/load'] = function () { + return {result: {fields_view: { + type: 'search', + fields: { + dummy: {type: 'char'} + }, + arch: { + tag: 'search', + attrs: {}, + children: [{ + tag: 'field', + attrs: { + name: 'dummy', + widget: 'dummy' + }, + children: [] + }] + } + }}}; + }; + instance.connection.responses['/web/searchview/get_filters'] = function () { + return []; + }; + instance.connection.responses['/web/searchview/fields_get'] = function () { + return {result: {fields: { + dummy: {type: 'char'} + }}}; + }; + + var dataset = {model: 'dummy.model', get_context: function () { return {}; }}; + var view = new instance.web.SearchView(null, dataset, false, {dummy: 42}); + view.appendTo($('#qunit-fixture')) + .always(start) + .then(function () { + ok(defaults_called, "should have called defaults"); + deepEqual( + view.query.toJSON(), + [{category: 'Dummy', values: [{label: 'dummy', value: 42}]}], + "should have generated a facet with the default value"); + }, function (error) { + ok(false, error.message); + }); + }); + // TODO: test defaults for various built-in widgets? }); diff --git a/addons/web/static/test/test.html b/addons/web/static/test/test.html index cc1916399f3..e352f63c17c 100644 --- a/addons/web/static/test/test.html +++ b/addons/web/static/test/test.html @@ -13,7 +13,7 @@ - +