summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/fields
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-12-12 18:39:43 +0100
committerChristophe Simonis <chs@odoo.com>2017-12-12 18:39:43 +0100
commitb37cc1f9b7897759a86cdccfa1b06d58361a97da (patch)
treef43246fae635fe7c33114c02ef437756f6387ae4 /addons/web/static/tests/fields
parent9d2d9a3528c7cf595c5f1d040ebf13748497add8 (diff)
parenta2ea4ba095cd82adae4cac917aa2485d30c8071e (diff)
[MERGE] forward port branch saas-16 up to a2ea4ba095c
Diffstat (limited to 'addons/web/static/tests/fields')
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js92
1 files changed, 91 insertions, 1 deletions
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 205473f3191..0739a6252ca 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -258,6 +258,31 @@ QUnit.module('relational_fields', {
form.destroy();
});
+ QUnit.test('context in many2one and default get', function (assert) {
+ assert.expect(1);
+
+ this.data.partner.fields.int_field.default = 14;
+ this.data.partner.fields.trululu.default = 2;
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="int_field"/>' +
+ '<field name="trululu" context="{\'blip\':int_field}"/>' +
+ '</form>',
+ mockRPC: function (route, args) {
+ if (args.method === 'name_get') {
+ assert.strictEqual(args.kwargs.context.blip, 14,
+ 'context should have been properly sent to the nameget rpc');
+ }
+ return this._super(route, args);
+ },
+ });
+ form.destroy();
+ });
+
QUnit.test('editing a many2one (with form view opened with external button)', function (assert) {
assert.expect(1);
var form = createView({
@@ -6713,6 +6738,63 @@ QUnit.module('relational_fields', {
form.destroy();
});
+ QUnit.test('one2many field: change value before pending onchange returns', function (assert) {
+ var done = assert.async();
+ assert.expect(2);
+
+ var M2O_DELAY = relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY;
+ relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = 0;
+
+ this.data.partner.onchanges = {
+ int_field: function () {}
+ };
+ var def;
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch:'<form string="Partners">' +
+ '<field name="p">' +
+ '<tree editable="bottom">' +
+ '<field name="int_field"/>' +
+ '<field name="trululu"/>' +
+ '</tree>' +
+ '</field>' +
+ '</form>',
+ mockRPC: function (route, args) {
+ var result = this._super.apply(this, arguments);
+ if (args.method === 'onchange') {
+ // delay the onchange RPC
+ return $.when(def).then(_.constant(result));
+ }
+ return result;
+ },
+ });
+
+ form.$('.o_field_x2many_list_row_add a').click();
+ def = $.Deferred();
+ form.$('.o_field_widget[name=int_field]')
+ .val('44')
+ .trigger('input');
+
+ var $dropdown = form.$('.o_field_many2one input').autocomplete('widget');
+ // set trululu before onchange
+ form.$('.o_field_many2one input').val('first').trigger('keydown').trigger('keyup');
+ // complete the onchange
+ def.resolve();
+ assert.strictEqual(form.$('.o_field_many2one input').val(), 'first',
+ 'should have kept the new value');
+ concurrency.delay(0).then(function () {
+ // check name_search result
+ assert.strictEqual($dropdown.find('li:not(.o_m2o_dropdown_option)').length, 1,
+ 'autocomplete should contains 1 suggestion');
+
+ relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = M2O_DELAY;
+ form.destroy();
+ done();
+ });
+ });
+
QUnit.test('focus is correctly reset after an onchange in an x2many', function (assert) {
assert.expect(2);
@@ -8622,7 +8704,7 @@ QUnit.module('relational_fields', {
});
QUnit.test('fieldmany2many tags in editable list', function (assert) {
- assert.expect(4);
+ assert.expect(7);
this.data.partner.records[0].timmy = [12];
@@ -8630,10 +8712,18 @@ QUnit.module('relational_fields', {
View: ListView,
model: 'partner',
data: this.data,
+ context: {take: 'five'},
arch:'<tree editable="bottom">' +
'<field name="foo"/>' +
'<field name="timmy" widget="many2many_tags"/>' +
'</tree>',
+ mockRPC: function (route, args) {
+ if (args.method === 'read' && args.model === 'partner_type') {
+ assert.deepEqual(args.kwargs.context, {take: 'five'},
+ 'The context should be passed to the RPC');
+ }
+ return this._super.apply(this, arguments);
+ }
});
assert.strictEqual(list.$('.o_data_row:first .o_field_many2manytags .badge').length, 1,