summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/web/static/src/js/core/dialog.js2
-rw-r--r--addons/web/static/tests/views/view_dialogs_tests.js44
2 files changed, 45 insertions, 1 deletions
diff --git a/addons/web/static/src/js/core/dialog.js b/addons/web/static/src/js/core/dialog.js
index cd76ec770bb..bb522992c2f 100644
--- a/addons/web/static/src/js/core/dialog.js
+++ b/addons/web/static/src/js/core/dialog.js
@@ -304,7 +304,7 @@ var Dialog = Widget.extend({
}
if (buttonData.close) {
self.onForceClose = false;
- Promise.resolve(def).then(self.close.bind(self)).guardedCatch(self.close.bind(self));
+ Promise.resolve(def).then(self.close.bind(self));
}
});
if (self.technical) {
diff --git a/addons/web/static/tests/views/view_dialogs_tests.js b/addons/web/static/tests/views/view_dialogs_tests.js
index 1086d157475..4e205c420a1 100644
--- a/addons/web/static/tests/views/view_dialogs_tests.js
+++ b/addons/web/static/tests/views/view_dialogs_tests.js
@@ -547,6 +547,50 @@ QUnit.module('Views', {
form.destroy();
});
+
+ QUnit.test('formviewdialog is not closed when button handlers return a rejected promise', async function (assert) {
+ assert.expect(3);
+
+ this.data.partner.fields.poney_ids = { string: "Poneys", type: "one2many", relation: 'partner' };
+ this.data.partner.records[0].poney_ids = [];
+ var reject = true;
+
+ var parent = createParent({
+ data: this.data,
+ archs: {
+ 'partner,false,form':
+ '<form string="Partner">' +
+ '<field name="poney_ids"><tree><field name="display_name"/></tree></field>' +
+ '</form>',
+ },
+ });
+
+ new dialogs.FormViewDialog(parent, {
+ res_model: 'partner',
+ res_id: 1,
+ buttons: [{
+ text: 'Click me !',
+ classes: "btn-secondary o_form_button_magic",
+ close: true,
+ click: function () {
+ return reject ? Promise.reject() : Promise.resolve();
+ },
+ }],
+ }).open();
+
+ await testUtils.nextTick();
+ assert.strictEqual($('.modal').length, 1, "should have a modal displayed");
+
+ await testUtils.dom.click($('.modal .o_form_button_magic'));
+ assert.strictEqual($('.modal').length, 1, "modal should still be opened");
+
+ reject = false;
+ await testUtils.dom.click($('.modal .o_form_button_magic'));
+ assert.strictEqual($('.modal').length, 0, "modal should be closed");
+
+ parent.destroy();
+ });
+
});
});