diff --git a/addons/web_settings_dashboard/static/src/js/dashboard.js b/addons/web_settings_dashboard/static/src/js/dashboard.js index 4eaf10aab53..2065769bdc0 100644 --- a/addons/web_settings_dashboard/static/src/js/dashboard.js +++ b/addons/web_settings_dashboard/static/src/js/dashboard.js @@ -346,10 +346,22 @@ var DashboardTranslations = Widget.extend({ template: 'DashboardTranslations', events: { - 'click .o_load_translations': 'on_load_translations' + 'click .o_load_translations': '_onLoadTranslations' }, - on_load_translations: function () { + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Called when clicking on "Load a translation" button. It prompts a dialog + * to load a translation. + * + * @private + * @param {MouseEvent} ev + */ + _onLoadTranslations: function (ev) { + ev.preventDefault(); this.do_action('base.action_view_base_language_install'); } diff --git a/addons/web_settings_dashboard/static/tests/dashboard_tests.js b/addons/web_settings_dashboard/static/tests/dashboard_tests.js index 7b593969967..0fab2f8d97f 100644 --- a/addons/web_settings_dashboard/static/tests/dashboard_tests.js +++ b/addons/web_settings_dashboard/static/tests/dashboard_tests.js @@ -21,7 +21,11 @@ function createDashboard(params) { widget.destroy(); }; - dashboard.appendTo($('#qunit-fixture')); + if (params.debug) { + dashboard.appendTo($('body')); + } else { + dashboard.appendTo($('#qunit-fixture')); + } return dashboard; } @@ -191,6 +195,42 @@ QUnit.module('settings_dashboard', function () { dashboard.destroy(); }); + + QUnit.test('Prevent default behaviour when clicking on load translation', function (assert) { + assert.expect(3); + + var dashboard = createDashboard({ + dashboards: ['translations'], + mockRPC: function (route, args) { + if (route === '/web_settings_dashboard/data') { + return $.when(); + } + return this._super.apply(this, arguments); + }, + }); + + var $loadTranslation = dashboard.$('.o_load_translations'); + + assert.strictEqual($loadTranslation.length, 1, + "should have button to load translations"); + + // Prevent the browser default behaviour when clicking on anything. + // This includes clicking on a `` with `href`, so that it does not + // change the URL in the address bar. + $(document.body).on('click.o_test', function (ev) { + assert.ok(ev.isDefaultPrevented(), + "should have prevented browser default behaviour"); + assert.strictEqual(ev.target, $loadTranslation[0], + "should have clicked on 'load a translation' button"); + ev.preventDefault(); + }); + + $loadTranslation.click(); + + $(document.body).off('click.o_test'); + + dashboard.destroy(); + }); }); });