summaryrefslogtreecommitdiff
path: root/addons/web/static/tests
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-03-14 14:13:47 +0100
committerChristophe Simonis <chs@odoo.com>2019-03-14 14:13:47 +0100
commit9a4e84ae6670a6ce7086174a3f33f2eee8ded0a3 (patch)
tree6a89fa5e6afe9120abda03cfbd32e27cf6cf4768 /addons/web/static/tests
parent5625257991d8997c453aee26b5f05ef85925824e (diff)
parentf5ab04ce5098bb3c3e88ca18ba6b533e6139f8e5 (diff)
[MERGE] forward port branch saas-11.3 up to f5ab04ce509
Diffstat (limited to 'addons/web/static/tests')
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js37
-rw-r--r--addons/web/static/tests/views/form_tests.js104
2 files changed, 141 insertions, 0 deletions
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 640e02701c2..bae181fa7a6 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -3596,6 +3596,43 @@ QUnit.module('relational_fields', {
form.destroy();
});
+ QUnit.test('embedded readonly one2many with handle widget', function (assert) {
+ assert.expect(4);
+
+ this.data.partner.records[0].turtles = [1, 2, 3];
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch:'<form string="Partners">' +
+ '<sheet>' +
+ '<field name="turtles" readonly="1">' +
+ '<tree editable="top">' +
+ '<field name="turtle_int" widget="handle"/>' +
+ '<field name="turtle_foo"/>' +
+ '</tree>' +
+ '</field>' +
+ '</sheet>' +
+ '</form>',
+ res_id: 1,
+ });
+
+ assert.strictEqual(form.$('.o_row_handle').length, 3,
+ "there should be 3 handles (one for each row)");
+ assert.strictEqual(form.$('.o_row_handle:visible').length, 0,
+ "the handles should be hidden in readonly mode");
+
+ form.$buttons.find('.o_form_button_edit').click();
+
+ assert.strictEqual(form.$('.o_row_handle').length, 3,
+ "the handles should still be there");
+ assert.strictEqual(form.$('.o_row_handle:visible').length, 0,
+ "the handles should still be hidden (on readonly fields)");
+
+ form.destroy();
+ });
+
QUnit.test('onchange for embedded one2many in a one2many with a second page', function (assert) {
assert.expect(1);
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index ebb579edd00..bd3b775aa16 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -6215,6 +6215,66 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('form view is not broken if save failed in readonly mode on field changed', function (assert) {
+ assert.expect(10);
+
+ var failFlag = false;
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<header><field name="trululu" widget="statusbar" clickable="True"/></header>' +
+ '</form>',
+ res_id: 1,
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.step('write');
+ if (failFlag) {
+ return $.Deferred().reject();
+ }
+ } else if (args.method === 'read') {
+ assert.step('read');
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ var $selectedState = form.$('.o_statusbar_status button[data-value="4"]');
+ assert.ok($selectedState.hasClass('btn-primary') && $selectedState.hasClass('disabled'),
+ "selected status should be btn-primary and disabled");
+
+ failFlag = true;
+ var $clickableState = form.$('.o_statusbar_status button[data-value="1"]');
+ $clickableState.click();
+
+ var $lastActiveState = form.$('.o_statusbar_status button[data-value="4"]');
+ $selectedState = form.$('.o_statusbar_status button.btn-primary');
+ assert.strictEqual($selectedState[0], $lastActiveState[0],
+ "selected status is AAA record after save fail");
+
+ failFlag = false;
+ $clickableState = form.$('.o_statusbar_status button[data-value="1"]');
+ $clickableState.click();
+
+ var $lastClickedState = form.$('.o_statusbar_status button[data-value="1"]');
+ $selectedState = form.$('.o_statusbar_status button.btn-primary');
+ assert.strictEqual($selectedState[0], $lastClickedState[0],
+ "last clicked status should be active");
+
+ assert.verifySteps([
+ 'read',
+ 'write', // fails
+ 'read', // must reload when saving fails
+ 'write', // works
+ 'read', // must reload when saving works
+ 'read', // fixme: this read should not be necessary
+ ]);
+
+ form.destroy();
+ });
+
QUnit.test('support password attribute', function (assert) {
assert.expect(3);
@@ -7005,6 +7065,50 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('Form view from ordered, grouped list view correct context', function (assert) {
+ assert.expect(10);
+ this.data.partner.records[0].timmy = [12];
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="foo"/>' +
+ '<field name="timmy"/>' +
+ '</form>',
+ archs: {
+ 'partner_type,false,list':
+ '<list>' +
+ '<field name="name"/>' +
+ '</list>',
+ },
+ viewOptions: {
+ // Simulates coming from a list view with a groupby and filter
+ context: {
+ orderedBy: [{name: 'foo', asc:true}],
+ group_by: ['foo'],
+ }
+ },
+ res_id: 1,
+ mockRPC: function (route, args) {
+ assert.step(args.model + ":" + args.method);
+ if (args.method === 'read') {
+ assert.ok(args.kwargs.context, 'context is present');
+ assert.notOk('orderedBy' in args.kwargs.context,
+ 'orderedBy not in context');
+ assert.notOk('group_by' in args.kwargs.context,
+ 'group_by not in context');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.verifySteps(['partner_type:load_views', 'partner:read', 'partner_type:read']);
+
+ form.destroy();
+ });
+
QUnit.test('edition in form view on a "noCache" model', function (assert) {
assert.expect(4);