From 450e2f4d488ae9723ef668835799c8371461410d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Wed, 22 Feb 2017 12:19:18 +0100 Subject: [PATCH] [FIX] web: basicmodel can evaluate context for new records --- .../static/src/js/views/basic/basic_model.js | 4 +++ .../test/fields/relational_fields_tests.js | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 5baf65f1c30..1e94ab8c47d 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -475,12 +475,15 @@ var Model = AbstractModel.extend({ }); record._changes[name] = rec.id; } else if (field.type === 'one2many' || field.type === 'many2many') { + var attrs = record.fieldAttrs[name]; var x2manyList = self._makeDataPoint({ context: record.context, fieldAttrs: field.fieldAttrs, fields: field.relatedFields, limit: field.limit, modelName: field.relation, + parentID: record.id, + rawContext: attrs && attrs.context, res_ids: [], static: true, type: 'list', @@ -1541,6 +1544,7 @@ var Model = AbstractModel.extend({ if (element.rawContext) { context.add(element.rawContext); var evalContext = this.get(element.parentID, {raw: true}).data; + evalContext.id = evalContext.id || false; context.set_eval_context(evalContext); } return context.eval(); diff --git a/addons/web/static/test/fields/relational_fields_tests.js b/addons/web/static/test/fields/relational_fields_tests.js index a18962add68..a0bc0354988 100644 --- a/addons/web/static/test/fields/relational_fields_tests.js +++ b/addons/web/static/test/fields/relational_fields_tests.js @@ -1334,6 +1334,41 @@ QUnit.module('relational_fields', { form.$('tbody td.o_form_field_x2many_list_row_add a').click(); }); + QUnit.test('new record, the context is properly evaluated and sent', function (assert) { + assert.expect(2); + + this.data.partner.fields.int_field.default = 17; + var n = 0; + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '', + mockRPC: function (route, args) { + if (args.method === 'default_get') { + n++; + if (n === 2) { + var context = args.kwargs.context; + assert.strictEqual(context.hello, "world"); + assert.strictEqual(context.abc, 17); + } + } + return this._super.apply(this, arguments); + }, + }); + + form.$buttons.find('.o_form_button_edit').click(); + form.$('tbody td.o_form_field_x2many_list_row_add a').click(); + }); + QUnit.module('FieldMany2Many'); QUnit.test('many2many kanban: edition', function (assert) {