[FIX] web: ActionManager: handle false actions
Server actions return an action to execute, or false. When they
return false, an 'ir.actions.act_window_close' must be executed,
such that the current dialog closes (if any) and mostly, the
'on_close' handler is executed, which ensures for example that the
current view is reloaded.
The case where server actions return false has been broken by rev.
32b8cec53. It produced tracebacks in several models, when clicking
on some actions in the 'Action' dropdown. For instance, in lunch,
go to Configuration > Products, open one in a form view, and click
on 'Lunch: Archive/Restore products' in the Action dropdown.
This commit is contained in:
committed by
Aaron Bohy
parent
8b9e854be4
commit
4c186f30c3
@@ -510,6 +510,7 @@ var ActionManager = Widget.extend({
|
||||
},
|
||||
});
|
||||
return this.dp.add(runDef).then(function (action) {
|
||||
action = action || { type: 'ir.actions.act_window_close' };
|
||||
return self.doAction(action, options);
|
||||
});
|
||||
},
|
||||
|
||||
@@ -1324,6 +1324,45 @@ QUnit.module('ActionManager', {
|
||||
actionManager.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('handle server actions returning false', function (assert) {
|
||||
assert.expect(9);
|
||||
|
||||
var actionManager = createActionManager({
|
||||
actions: this.actions,
|
||||
archs: this.archs,
|
||||
data: this.data,
|
||||
mockRPC: function (route, args) {
|
||||
assert.step(args.method || route);
|
||||
if (route === '/web/action/run') {
|
||||
return $.when(false);
|
||||
}
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
// execute an action in target="new"
|
||||
actionManager.doAction(5, {
|
||||
on_close: assert.step.bind(assert, 'close handler'),
|
||||
});
|
||||
assert.strictEqual($('.o_technical_modal .o_form_view').length, 1,
|
||||
"should have rendered a form view in a modal");
|
||||
|
||||
// execute a server action that returns false
|
||||
actionManager.doAction(2);
|
||||
assert.strictEqual($('.o_technical_modal').length, 0,
|
||||
"should have closed the modal");
|
||||
assert.verifySteps([
|
||||
'/web/action/load', // action 5
|
||||
'load_views',
|
||||
'default_get',
|
||||
'/web/action/load', // action 2
|
||||
'/web/action/run',
|
||||
'close handler',
|
||||
]);
|
||||
|
||||
actionManager.destroy();
|
||||
});
|
||||
|
||||
QUnit.module('Report actions');
|
||||
|
||||
QUnit.test('can execute report actions from db ID', function (assert) {
|
||||
|
||||
Reference in New Issue
Block a user