summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Paridans <app@odoo.com>2018-10-22 09:10:01 +0000
committerAdrien Dieudonne <adr@odoo.com>2018-10-23 16:58:58 +0000
commit60d3fc736c8e990f83c075695ee4035485eb93b8 (patch)
treee34b8260baba9d063d6b4272f10309b492cd1e1a
parenta4f34c64806b8279877b29b32d840c36fb204601 (diff)
[FIX] partner_autocomplete: autocomplete not defined in mobile
Bugfix to prevent traceback in mobile apps due to override of Many2one widget with native implementation. Happens in every form view containing a partner field. Implemented as defensive programming. The goal of the included test is to prevent a silent error for the webclient. It doesn't test the actual behavior in mobile (where there is no DOM for Many2one). Task #1896641 closes odoo/odoo#27967
-rw-r--r--addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js5
-rw-r--r--addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js41
2 files changed, 45 insertions, 1 deletions
diff --git a/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js b/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js
index 6abf1751461..059629010b8 100644
--- a/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js
+++ b/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js
@@ -65,6 +65,11 @@ var PartnerField = FieldMany2One.extend({
*/
_modifyAutompleteRendering: function (){
var api = this.$input.data('ui-autocomplete');
+ // FIXME: bugfix to prevent traceback in mobile apps due to override
+ // of Many2one widget with native implementation.
+ if (!api) {
+ return;
+ }
api._renderItem = function(ul, item){
ul.addClass('o_partner_autocomplete_dropdown');
var $a = $('<a/>')["html"](item.label);
diff --git a/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js b/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
index 5eebcf85ce0..9a49acd846f 100644
--- a/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
+++ b/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
@@ -2,9 +2,11 @@ odoo.define('partner_autocomplete.tests', function (require) {
"use strict";
var FormView = require('web.FormView');
+ var concurrency = require('web.concurrency');
var testUtils = require("web.test_utils");
var AutocompleteCore = require('partner.autocomplete.core');
var AutocompleteField = require('partner.autocomplete.fieldchar');
+ var PartnerField = require('partner.autocomplete.many2one');
var createView = testUtils.createAsyncView;
@@ -100,6 +102,7 @@ odoo.define('partner_autocomplete.tests', function (require) {
searchable: true
},
name: {string: "Name", type: "char", searchable: true},
+ parent_id: {string: "Company", type: "many2one", relation: "res.partner"},
website: {string: "Website", type: "char", searchable: true},
image: {string: "Image", type: "binary", searchable: true},
email: {string: "Email", type: "char", searchable: true},
@@ -332,4 +335,40 @@ odoo.define('partner_autocomplete.tests', function (require) {
done();
});
});
-}); \ No newline at end of file
+
+ QUnit.test("Partner autocomplete : render Many2one", function (assert) {
+ var done = assert.async();
+ assert.expect(3);
+
+ var M2O_DELAY = PartnerField.prototype.AUTOCOMPLETE_DELAY;
+ PartnerField.prototype.AUTOCOMPLETE_DELAY = 0;
+
+ createView({
+ View: FormView,
+ model: 'res.partner',
+ data: this.data,
+ arch:
+ '<form>' +
+ '<field name="name"/>' +
+ '<field name="parent_id" widget="res_partner_many2one"/>' +
+ '</form>',
+ }).then(function (form) {
+ var $input = form.$('.o_field_many2one[name="parent_id"] input:visible');
+ assert.strictEqual($input.length, 1, "there should be an <input/> for the Many2one");
+
+ $input.val('odoo').trigger('input');
+
+ concurrency.delay(0).then(function () {
+ var $dropdown = $input.autocomplete('widget');
+ assert.strictEqual($dropdown.length, 1, "there should be an opened dropdown");
+ assert.ok($dropdown.is('.o_partner_autocomplete_dropdown'),
+ "there should be a partner_autocomplete");
+
+ PartnerField.prototype.AUTOCOMPLETE_DELAY = M2O_DELAY;
+ form.destroy();
+
+ done();
+ });
+ });
+ });
+});