[FIX] web: Send attachment ids on file loaded

This commit fixes a bug introduced when migrating
from jquery deferred to native JS Promises (ab56e63).

Steps to reproduce:
1. Go to the Expense app
2. Create a new expense
3. Click on "Attach Document" and upload a file
=> crash and infinite loading spinner

After loading files, the `attach_document` widget is
supposed to call a callback action with attachment ids
as argument.

Currently, attachement ids are not correclty retrieved.
They are retrieved via the `arguments` object but since ab56e63
`arguments` refers to the arguments of the Promise callback
function and no longer to the handler function `_onFileLoaded`
arguments.

closes odoo/odoo#33048

Signed-off-by: VincentSchippefilt <VincentSchippefilt@users.noreply.github.com>
This commit is contained in:
Lucas Lefèvre
2019-04-30 11:22:32 +00:00
parent 91fd1cf202
commit 0d21735a92
2 changed files with 28 additions and 2 deletions
@@ -109,10 +109,10 @@ var AttachDocument = Widget.extend({
*/
_onFileLoaded: function () {
var self = this;
// the first argument isn't a file but the jQuery.Event
var files = Array.prototype.slice.call(arguments, 1);
return new Promise(function (resolve) {
if (self.node.attrs.action) {
// the first argument isn't a file but the jQuery.Event
var files = Array.prototype.slice.call(arguments, 1);
self._rpc({
model: self.res_model,
method: self.node.attrs.action,
@@ -6801,6 +6801,32 @@ QUnit.module('Views', {
delete widgetRegistry.map.test;
});
QUnit.test('attach document widget calls action with attachment ids', async function (assert) {
assert.expect(1);
var form = await createView({
View: FormView,
model: 'partner',
data: this.data,
mockRPC: function (route, args) {
if (args.method === 'my_action') {
assert.deepEqual(args.kwargs.attachment_ids, [5, 2]);
return Promise.resolve();
}
return this._super.apply(this, arguments);
},
arch: '<form>' +
'<widget name="attach_document" action="my_action"/>' +
'</form>',
});
var onFileLoadedEventName = form.$('.o_form_binary_form').attr('target')
// trigger _onFileLoaded function
$(window).trigger(onFileLoadedEventName, [{id: 5}, {id:2}]);
form.destroy();
});
QUnit.test('support header button as widgets on form statusbar', async function (assert) {
assert.expect(2);