diff options
Diffstat (limited to 'addons/web/static/tests/views/form_tests.js')
| -rw-r--r-- | addons/web/static/tests/views/form_tests.js | 119 |
1 files changed, 118 insertions, 1 deletions
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 37420e0f076..5b0dd69ddd4 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -7,6 +7,7 @@ var config = require('web.config'); var core = require('web.core'); var fieldRegistry = require('web.field_registry'); var FormView = require('web.FormView'); +var mixins = require('web.mixins'); var pyeval = require('web.pyeval'); var testUtils = require('web.test_utils'); var widgetRegistry = require('web.widget_registry'); @@ -629,7 +630,7 @@ QUnit.module('Views', { }); QUnit.test('readonly attrs on fields are re-evaluated on field change', function (assert) { - assert.expect(3); + assert.expect(4); var form = createView({ View: FormView, @@ -655,6 +656,9 @@ QUnit.module('Views', { form.$('.o_field_boolean input').click(); assert.strictEqual(form.$('span[name="foo"]').length, 1, "the foo field widget should have been rerendered to now be readonly again"); + form.$('.o_field_boolean input').click(); + assert.strictEqual(form.$('input[name="foo"]').length, 1, + "the foo field widget should have been rerendered to now be editable again"); form.destroy(); }); @@ -6249,6 +6253,41 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('basic support for widgets', function (assert) { + assert.expect(1); + + var MyWidget = Widget.extend({ + init: function (parent, dataPoint) { + this.data = dataPoint.data; + }, + start: function () { + this.$el.text(this.data.foo + "!"); + }, + updateState: function (dataPoint) { + this.$el.text(dataPoint.data.foo + "!"); + }, + }); + widgetRegistry.add('test', MyWidget); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '<form string="Partners">' + + '<field name="foo"/>' + + '<widget name="test"/>' + + '</form>', + }); + + form.$('input[name="foo"]').val("I am alive").trigger('input'); + assert.strictEqual(form.$('.o_widget').text(), 'I am alive!', + "widget should have been updated"); + + form.destroy(); + delete widgetRegistry.map.test; + }); + + QUnit.test('bounce edit button in readonly mode', function (assert) { assert.expect(3); @@ -6360,6 +6399,84 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('check if the view destroys all widgets and instances', function (assert) { + assert.expect(1); + + var instanceNumber = 0; + testUtils.patch(mixins.ParentedMixin, { + init: function () { + instanceNumber++; + return this._super.apply(this, arguments); + }, + destroy: function () { + if (!this.isDestroyed()) { + instanceNumber--; + } + return this._super.apply(this, arguments); + } + }); + + var params = { + View: FormView, + model: 'partner', + data: this.data, + arch: '<form string="Partners">' + + '<sheet>' + + '<field name="display_name"/>' + + '<field name="foo"/>' + + '<field name="bar"/>' + + '<field name="int_field"/>' + + '<field name="qux"/>' + + '<field name="trululu"/>' + + '<field name="timmy"/>' + + '<field name="product_id"/>' + + '<field name="priority"/>' + + '<field name="state"/>' + + '<field name="date"/>' + + '<field name="datetime"/>' + + '<field name="product_ids"/>' + + '<field name="p">' + + '<tree default_order="foo desc">' + + '<field name="display_name"/>' + + '<field name="foo"/>' + + '</tree>' + + '</field>' + + '</sheet>' + + '</form>', + archs: { + 'partner,false,form': + '<form string="Partner">' + + '<sheet>' + + '<group>' + + '<field name="foo"/>' + + '</group>' + + '</sheet>' + + '</form>', + "partner_type,false,list": '<tree><field name="name"/></tree>', + 'product,false,list': '<tree><field name="display_name"/></tree>', + + }, + res_id: 1, + }; + + var form = createView(params); + form.destroy(); + + var initialInstanceNumber = instanceNumber; + instanceNumber = 0; + + form = createView(params); + + // call destroy function of controller to ensure that it correctly destroys everything + form.__destroy(); + + assert.strictEqual(instanceNumber, initialInstanceNumber + 3, "every widget must be destroyed exept the parent"); + + form.destroy(); + + testUtils.unpatch(mixins.ParentedMixin); + }); + QUnit.test('edition in form view on a "noCache" model', function (assert) { assert.expect(4); |
