summaryrefslogtreecommitdiff
path: root/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2018-09-18 17:16:16 +0200
committerTWA <twa@odoo.com>2018-09-21 14:02:22 +0200
commita6e1eb9f0ad285fac7d0ca0b9f89f046d78ec9c7 (patch)
tree147f86739a95d6924ebda835c62716e66edcbdb5 /addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
parentce16d0d2ab20ed223ab3dc2932ac7a6f27cccf5f (diff)
[ADD] partner_autocomplete: Added autocomplete on partners fields
For Name field or M2O, gives a list of companies Data comes from Odoo IAP Service
Diffstat (limited to 'addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js')
-rw-r--r--addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js335
1 files changed, 335 insertions, 0 deletions
diff --git a/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js b/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
new file mode 100644
index 00000000000..5e7a3ae3c1e
--- /dev/null
+++ b/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
@@ -0,0 +1,335 @@
+odoo.define('partner_autocomplete.tests', function (require) {
+ "use strict";
+
+ var FormView = require('web.FormView');
+ var testUtils = require("web.test_utils");
+ var AutocompleteCore = require('partner.autocomplete.core');
+ var AutocompleteField = require('partner.autocomplete.fieldchar');
+
+ var createView = testUtils.createAsyncView;
+
+ function _compareResultFields(assert, form, fields, createData) {
+ var type, formatted, $fieldInput;
+
+ _.each(createData, function (val, key) {
+ if (fields[key]) {
+ if (key === 'image') {
+ if (val) val = 'data:image/png;base64,' + val;
+ assert.strictEqual(form.$(".o_field_image img").attr("data-src"), val, 'image value should have been updated to "' + val + '"');
+ } else {
+ type = fields[key].type;
+ $fieldInput = form.$('input[name="' + key + '"]');
+ if ($fieldInput.length) {
+ formatted = $fieldInput.val();
+ formatted = type === 'integer' ? parseInt(formatted, 10) : formatted;
+ assert.strictEqual(
+ formatted,
+ val === false ? 0 : val,
+ key + ' value should have been updated to "' + val + '"'
+ );
+ }
+
+ }
+ }
+ });
+ }
+
+ QUnit.module('partner_autocomplete', {
+ before: function () {
+ var suggestions = [
+ {name: "Odoo", website: "odoo.com", logo: "odoo.com/logo.png", vat: "BE0477472701"}
+ ];
+
+ var enrich_data = {
+ country_id: 20,
+ state_id: false,
+ partner_gid: 1,
+ website: "odoo.com",
+ comment: "Comment on Odoo",
+ street: "40 Chaussée de Namur",
+ city: "Ramillies",
+ zip: "1367",
+ phone: "+1 650-691-3277",
+ email: "info@odoo.com",
+ vat: "BE0477472701",
+ };
+
+ testUtils.patch(AutocompleteCore, {
+ _getBase64Image: function (url) {
+ return $.when(url === "odoo.com/logo.png" ? "odoobase64" : "");
+ },
+ isOnline: function () {
+ return true;
+ },
+ getCreateData: function (company) {
+ var self = this;
+ var def = this._super.apply(this, arguments);
+ def.then(function (data) {
+ self._createData = data.company;
+ });
+ return def;
+ },
+ enrichCompany: function (company) {
+ return $.when(enrich_data);
+ },
+ _getOdooSuggestions(value, isVAT) {
+ var results = _.filter(suggestions, function (suggestion) {
+ value = value ? value.toLowerCase() : '';
+ if (isVAT) return (suggestion.vat.toLowerCase().indexOf(value) >= 0);
+ else return (suggestion.name.toLowerCase().indexOf(value) >= 0);
+ });
+ return $.when(results);
+ },
+ _getClearbitSuggestions(value) {
+ return this._getOdooSuggestions(value);
+ },
+ });
+
+ testUtils.patch(AutocompleteField, {
+ debounceSuggestions: 0,
+ });
+ },
+ beforeEach: function () {
+ this.data = {
+ 'res.partner': {
+ fields: {
+ company_type: {
+ string: "Company Type",
+ type: "selection",
+ selection: [["company", "Company"], ["individual", "Individual"]],
+ searchable: true
+ },
+ name: {string: "Name", type: "char", searchable: true},
+ website: {string: "Website", type: "char", searchable: true},
+ image: {string: "Image", type: "binary", searchable: true},
+ email: {string: "Email", type: "char", searchable: true},
+ phone: {string: "Phone", type: "char", searchable: true},
+ street: {string: "Street", type: "char", searchable: true},
+ city: {string: "City", type: "char", searchable: true},
+ zip: {string: "Zip", type: "char", searchable: true},
+ state_id: {string: "State", type: "integer", searchable: true},
+ country_id: {string: "Country", type: "integer", searchable: true},
+ comment: {string: "Comment", type: "char", searchable: true},
+ vat: {string: "Vat", type: "char", searchable: true},
+ is_company: {string: "Is comapny", type: "bool", searchable: true},
+ partner_gid: {string: "Company data ID", type: "integer", searchable: true},
+ },
+ records: [],
+ onchanges: {
+ company_type: function (obj) {
+ obj.is_company = obj.company_type === 'company';
+ },
+ },
+ },
+ };
+ },
+ after: function () {
+ testUtils.unpatch(AutocompleteField);
+ testUtils.unpatch(AutocompleteCore);
+ },
+ });
+
+ QUnit.test("Partner autocomplete : Company type = Individual", function (assert) {
+ assert.expect(2);
+ var done = assert.async();
+ createView({
+ View: FormView,
+ model: 'res.partner',
+ data: this.data,
+ arch:
+ '<form>' +
+ '<field name="company_type"/>' +
+ '<field name="name" widget="field_partner_autocomplete"/>' +
+ '<field name="website"/>' +
+ '<field name="image" widget="image"/>' +
+ '</form>',
+ }).then(function (form){
+ // Set company type to Individual
+ var $company_type = form.$("select[name='company_type']");
+ $company_type.val('"individual"').trigger('change');
+
+ // Check input exists
+ var $input = form.$(".o_field_partner_autocomplete > input:visible");
+ assert.strictEqual($input.length, 1, "there should be an <input/> for the Partner field");
+
+ // Change input val and assert nothing happens
+ $input.val("odoo").trigger("input");
+ var $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 0, "there should not be an opened dropdown");
+
+ form.destroy();
+
+ done();
+ });
+ });
+
+
+ QUnit.test("Partner autocomplete : Company type = Company / Name search", function (assert) {
+ assert.expect(21);
+ var done = assert.async();
+ var fields = this.data['res.partner'].fields;
+ createView({
+ View: FormView,
+ model: 'res.partner',
+ data: this.data,
+ arch:
+ '<form>' +
+ '<field name="company_type"/>' +
+ '<field name="name" widget="field_partner_autocomplete"/>' +
+ '<field name="website"/>' +
+ '<field name="image" widget="image"/>' +
+ '<field name="email"/>' +
+ '<field name="phone"/>' +
+ '<field name="street"/>' +
+ '<field name="city"/>' +
+ '<field name="state_id"/>' +
+ '<field name="zip"/>' +
+ '<field name="country_id"/>' +
+ '<field name="comment"/>' +
+ '<field name="vat"/>' +
+ '</form>',
+ mockRPC: function (route, args) {
+ if (args.method) {
+ assert.step(args.method);
+ }
+ if (route === "/web/static/src/img/placeholder.png"
+ || route === "odoo.com/logo.png"
+ || route === "data:image/png;base64,odoobase64") { // land here as it is not valid base64 content
+ return $.when();
+ }
+ return this._super.apply(this, arguments);
+ },
+ }).then(function (form){
+ // Set company type to Company
+ var $company_type = form.$("select[name='company_type']");
+ $company_type.val('"company"').trigger('change');
+
+ // Check input exists
+ var $input = form.$(".o_field_partner_autocomplete > input:visible");
+ assert.strictEqual($input.length, 1, "there should be an <input/> for the field");
+
+ // Change input val and assert changes
+ $input.val("odoo").trigger("input");
+
+ var $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 1, "there should be an opened dropdown");
+ assert.strictEqual($dropdown.children().length, 1, "there should be only one proposition");
+
+ $dropdown.find("a").first().click();
+ $input = form.$(".o_field_partner_autocomplete > input");
+ assert.strictEqual($input.val(), "Odoo", "Input value should have been updated to \"Odoo\"");
+ assert.strictEqual(form.$("input.o_field_widget").val(), "odoo.com", "website value should have been updated to \"odoo.com\"");
+
+ _compareResultFields(assert, form, fields, AutocompleteCore._createData);
+
+ // Try suggestion with bullshit query
+ $input.val("ZZZZZZZZZZZZZZZZZZZZZZ").trigger("input");
+ $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 0, "there should be no opened dropdown when no result");
+
+ // Try autocomplete again
+ $input.val("odoo").trigger("input");
+ $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 1, "there should be an opened dropdown when typing odoo letters again");
+
+ // Test if dropdown closes on focusout
+ $input.trigger("focusout");
+ $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 0, "unfocusing the input should close the dropdown");
+
+ form.destroy();
+
+ done();
+ });
+ });
+
+ QUnit.test("Partner autocomplete : Company type = Company / VAT search", function (assert) {
+ assert.expect(32);
+ var done = assert.async();
+ var fields = this.data['res.partner'].fields;
+ createView({
+ View: FormView,
+ model: 'res.partner',
+ data: this.data,
+ arch:
+ '<form>' +
+ '<field name="company_type"/>' +
+ '<field name="name" widget="field_partner_autocomplete"/>' +
+ '<field name="website"/>' +
+ '<field name="image" widget="image"/>' +
+ '<field name="email"/>' +
+ '<field name="phone"/>' +
+ '<field name="street"/>' +
+ '<field name="city"/>' +
+ '<field name="state_id"/>' +
+ '<field name="zip"/>' +
+ '<field name="country_id"/>' +
+ '<field name="comment"/>' +
+ '<field name="vat"/>' +
+ '</form>',
+ mockRPC: function (route, args) {
+ if (args.method) {
+ assert.step(args.method);
+ }
+ if (route === "/web/static/src/img/placeholder.png"
+ || route === "odoo.com/logo.png"
+ || route === "data:image/png;base64,odoobase64") { // land here as it is not valid base64 content
+ return $.when();
+ }
+ return this._super.apply(this, arguments);
+ },
+ }).then(function (form){
+ // Set company type to Company
+ var $company_type = form.$("select[name='company_type']");
+ $company_type.val('"company"').trigger('change');
+
+
+ // Check input exists
+ var $input = form.$(".o_field_partner_autocomplete > input:visible");
+ assert.strictEqual($input.length, 1, "there should be an <input/> for the field");
+
+ // Set incomplete VAT and assert changes
+ $input.val("BE047747270").trigger("input");
+
+ var $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 0, "there should be no opened dropdown no results with incomplete VAT number");
+
+ // Set complete VAT and assert changes
+ // First suggestion (only vat result)
+ $input.val("BE0477472701").trigger("input");
+ $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 1, "there should be an opened dropdown");
+ assert.strictEqual($dropdown.children().length, 1, "there should be one proposition for complete VAT number");
+
+ $dropdown.find("a").first().click();
+
+ $input = form.$(".o_field_partner_autocomplete > input");
+ assert.strictEqual($input.val(), "Odoo", "Input value should have been updated to \"Odoo\"");
+
+ _compareResultFields(assert, form, fields, AutocompleteCore._createData);
+
+ // Set complete VAT and assert changes
+ // Second suggestion (only vat + clearbit result)
+ $input.val("BE0477472701").trigger("input");
+ $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 1, "there should be an opened dropdown");
+ assert.strictEqual($dropdown.children().length, 1, "there should be one proposition for complete VAT number");
+
+ $dropdown.find("a").first().click();
+
+ $input = form.$(".o_field_partner_autocomplete > input");
+ assert.strictEqual($input.val(), "Odoo", "Input value should have been updated to \"Odoo\"");
+
+ _compareResultFields(assert, form, fields, AutocompleteCore._createData);
+
+ // Test if dropdown closes on focusout
+ $input.trigger("focusout");
+ $dropdown = form.$(".o_field_partner_autocomplete .dropdown-menu:visible");
+ assert.strictEqual($dropdown.length, 0, "unfocusing the input should close the dropdown");
+
+ form.destroy();
+
+ done();
+ });
+ });
+}); \ No newline at end of file