[FIX] web: show warning on create onchange
When you create a new record, you will have in this order:
- default_get
- onchange (can trigger a warning)
- _pushController => close all dialogs since ea2207afea
This is an issue since the possible warning is directly hidden to the
user.
Without the change, the added test failed with:
Warning modal should be opened
"executing a window action with onchange warning do not hide it":
Found 0 elements to click on, instead of 1
opw-2342273
opw-2374051
closes #61732
closes odoo/odoo#63415
X-original-commit: ff61ab121e3fb3c0c9b269c0dc9a65b3f1c8e664
Signed-off-by: Nicolas Lempereur (nle) <nle@odoo.com>
This commit is contained in:
@@ -48,6 +48,7 @@ var CrashManagerDialog = Dialog.extend({
|
||||
this._super.apply(this, [parent, options]);
|
||||
this.message = error.message;
|
||||
this.traceback = error.traceback;
|
||||
core.bus.off('close_dialogs', this);
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ var RamStorage = require('web.RamStorage');
|
||||
var ReportService = require('web.ReportService');
|
||||
var SessionStorageService = require('web.SessionStorageService');
|
||||
var testUtils = require('web.test_utils');
|
||||
var WarningDialog = require('web.CrashManager').WarningDialog;
|
||||
var Widget = require('web.Widget');
|
||||
|
||||
var createActionManager = testUtils.createActionManager;
|
||||
@@ -587,6 +588,57 @@ QUnit.module('ActionManager', {
|
||||
actionManager.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('executing a window action with onchange warning does not hide it', async function (assert) {
|
||||
assert.expect(2);
|
||||
|
||||
this.archs['partner,false,form'] = `
|
||||
<form>
|
||||
<field name="foo"/>
|
||||
</form>`;
|
||||
|
||||
var actionManager = await createActionManager({
|
||||
actions: this.actions,
|
||||
archs: this.archs,
|
||||
data: this.data,
|
||||
mockRPC: function (route, args) {
|
||||
if (args.method === 'onchange') {
|
||||
return Promise.resolve({
|
||||
value: {},
|
||||
warning: {
|
||||
title: "Warning",
|
||||
message: "Everything is alright",
|
||||
type: 'dialog',
|
||||
},
|
||||
});
|
||||
}
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
intercepts: {
|
||||
warning: function (event) {
|
||||
new WarningDialog(actionManager, {
|
||||
title: event.data.title,
|
||||
}, event.data).open();
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await actionManager.doAction(3);
|
||||
|
||||
await testUtils.dom.click(actionManager.$('.o_list_button_add'));
|
||||
assert.containsOnce(
|
||||
$,
|
||||
'.modal.o_technical_modal.show',
|
||||
"Warning modal should be opened");
|
||||
|
||||
await testUtils.dom.click($('.modal.o_technical_modal.show button.close'));
|
||||
assert.containsNone(
|
||||
$,
|
||||
'.modal.o_technical_modal.show',
|
||||
"Warning modal should be closed");
|
||||
|
||||
actionManager.destroy();
|
||||
});
|
||||
|
||||
QUnit.module('Push State');
|
||||
|
||||
QUnit.test('properly push state', async function (assert) {
|
||||
|
||||
@@ -123,6 +123,7 @@ odoo.define('web.test_utils', async function (require) {
|
||||
// to load xml files that are normally lazy loaded by specific widgets).
|
||||
await Promise.all([
|
||||
session.is_bound,
|
||||
ajax.loadXML('/web/static/src/xml/crash_manager.xml', core.qweb),
|
||||
ajax.loadXML('/web/static/src/xml/debug.xml', core.qweb),
|
||||
ajax.loadXML('/web/static/src/xml/dialog.xml', core.qweb),
|
||||
ajax.loadXML('/web/static/src/xml/translation_dialog.xml', core.qweb),
|
||||
|
||||
Reference in New Issue
Block a user