diff options
| author | Lucas Lefèvre <lul@odoo.com> | 2019-04-30 11:22:32 +0000 |
|---|---|---|
| committer | Lucas Lefèvre <lul@odoo.com> | 2019-04-30 11:22:32 +0000 |
| commit | 0d21735a92c8d0b60babaac6d62dbc8eda7c11ea (patch) | |
| tree | 3be1912a5ec1d66d3c29a9d0565de49a75a3cc21 | |
| parent | 91fd1cf2022f5f9351a77393435dc5071f0dae05 (diff) | |
[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>
| -rw-r--r-- | addons/web/static/src/js/widgets/attach_document.js | 4 | ||||
| -rw-r--r-- | addons/web/static/tests/views/form_tests.js | 26 |
2 files changed, 28 insertions, 2 deletions
diff --git a/addons/web/static/src/js/widgets/attach_document.js b/addons/web/static/src/js/widgets/attach_document.js index 3175875c151..a4a72a62765 100644 --- a/addons/web/static/src/js/widgets/attach_document.js +++ b/addons/web/static/src/js/widgets/attach_document.js @@ -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, diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index c01a1c46fb3..f41dbcb7f28 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -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); |
