[FIX] missing state propagation in searchview initialization, test defaults calling on fields

bzr revid: xmo@openerp.com-20120426102949-xtv3inug3sue0h6a
This commit is contained in:
Xavier Morel 2012-04-26 12:29:49 +02:00
parent 611adc838f
commit 2591fa5e1e
3 changed files with 106 additions and 2 deletions

View File

@ -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 () {

View File

@ -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?
});

View File

@ -13,7 +13,7 @@
<script src="/web/static/lib/backbone/backbone.js" type="text/javascript"></script>
<!-- jquery -->
<script src="/web/static/lib/jquery/jquery-1.6.4.js"></script>
<script src="/web/static/lib/jquery/jquery-1.7.2b1.js"></script>
<script src="/web/static/lib/jquery.ui/js/jquery-ui-1.8.17.custom.min.js"></script>
<script src="/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>