diff --git a/addons/web/static/src/views/form/form_controller.js b/addons/web/static/src/views/form/form_controller.js index dd338a3b029..c571a45e3e4 100644 --- a/addons/web/static/src/views/form/form_controller.js +++ b/addons/web/static/src/views/form/form_controller.js @@ -480,9 +480,6 @@ export class FormController extends Component { saved = await this.props.saveRecord(record, clickParams); } else { const params = { reload: !(this.env.inDialog && clickParams.close) }; - if (!this.env.inDialog) { - params.onError = this.onSaveError.bind(this); - } saved = await record.save(params); } if (saved !== false && this.props.onSave) { diff --git a/addons/web/static/tests/views/form/form_view_tests.js b/addons/web/static/tests/views/form/form_view_tests.js index 80931bf87b9..593b1bdd3bf 100644 --- a/addons/web/static/tests/views/form/form_view_tests.js +++ b/addons/web/static/tests/views/form/form_view_tests.js @@ -12611,6 +12611,44 @@ QUnit.module("Views", (hooks) => { assert.containsOnce(target, ".o_error_dialog"); }); + QUnit.test("no 'oh snap' error when clicking on a view button", async (assert) => { + registry.category("services").add("error", errorService); + registry.category("error_dialogs").add("odoo.exceptions.UserError", WarningDialog); + // remove the override in qunit.js that swallows unhandledrejection errors + // s.t. we let the error service handle them + const originalOnUnhandledRejection = window.onunhandledrejection; + window.onunhandledrejection = () => {}; + registerCleanup(() => { + window.onunhandledrejection = originalOnUnhandledRejection; + }); + + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` +
`, + mockRPC(route, { method }) { + assert.step(method); + if (method === "web_save") { + throw makeServerError({ message: "Some business message" }); + } + }, + }); + + await click(target, "button[name=do_it]"); + assert.containsNone(target, ".o_form_error_dialog"); + assert.containsOnce(target, ".modal"); + assert.strictEqual( + target.querySelector(".modal .modal-body").textContent, + "Some business message" + ); + assert.verifySteps(["get_views", "onchange", "web_save"]); + }); + QUnit.test("no 'oh snap' error in form view in dialog", async (assert) => { assert.expect(5);