diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-02-28 13:47:09 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-02-28 13:47:09 +0100 |
| commit | 06898fac3c9b21d4fd5ef7efd35f829cdff15e46 (patch) | |
| tree | 6b6d657677778365b06bbf4fb7babcab688edcc2 /addons/web/static/tests | |
| parent | 012816f85f8f20243bd3dfb55abdfaac59722284 (diff) | |
| parent | f9d3b5b7dfe15fb53f14fa0a0ae91bbeded9939b (diff) | |
[MERGE] forward port branch saas-12.1 up to f9d3b5b7dfe
Diffstat (limited to 'addons/web/static/tests')
3 files changed, 112 insertions, 6 deletions
diff --git a/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js b/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js index 84fac135ad2..04b58b017ba 100644 --- a/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js +++ b/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js @@ -958,7 +958,7 @@ QUnit.module('fields', {}, function () { return result; }, }); - await testUtils.fields.many2one.searchAndClickItem('trululu', 'b'); + await testUtils.fields.many2one.searchAndClickItem('trululu', {search: 'b'}); testUtils.form.clickSave(form); assert.verifySteps(['name_create'], @@ -2596,6 +2596,107 @@ QUnit.module('fields', {}, function () { form.destroy(); }); + QUnit.test('search more in many2one: no text in input', async function (assert) { + // when the user clicks on 'Search More...' in a many2one dropdown, and there is no text + // in the input (i.e. no value to search on), we bypass the name_search that is meant to + // return a list of preselected ids to filter on in the list view (opened in a dialog) + assert.expect(6); + + for (var i = 0; i < 8; i++) { + this.data.partner.records.push({id: 100 + i, display_name: 'test_' + i}); + } + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '<form><field name="trululu"/></form>', + archs: { + 'partner,false,list': '<list><field name="display_name"/></list>', + 'partner,false,search': '<search></search>', + }, + mockRPC: function (route, args) { + assert.step(args.method || route); + if (route === '/web/dataset/search_read') { + assert.deepEqual(args.domain, [], + "should not preselect ids as there as nothing in the m2o input"); + } + return this._super.apply(this, arguments); + }, + }); + + await testUtils.fields.many2one.searchAndClickItem('trululu', { + item: 'Search More', + search: '', + }); + + assert.verifySteps([ + 'default_get', + 'name_search', // to display results in the dropdown + 'load_views', // list view in dialog + '/web/dataset/search_read', // to display results in the dialog + ]); + + form.destroy(); + }); + + QUnit.test('search more in many2one: text in input', async function (assert) { + // when the user clicks on 'Search More...' in a many2one dropdown, and there is some + // text in the input, we perform a name_search to get a (limited) list of preselected + // ids and we add a dynamic filter (with those ids) to the search view in the dialog, so + // that the user can remove this filter to bypass the limit + assert.expect(12); + + for (var i = 0; i < 8; i++) { + this.data.partner.records.push({id: 100 + i, display_name: 'test_' + i}); + } + + var expectedDomain; + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '<form><field name="trululu"/></form>', + archs: { + 'partner,false,list': '<list><field name="display_name"/></list>', + 'partner,false,search': '<search></search>', + }, + mockRPC: function (route, args) { + assert.step(args.method || route); + if (route === '/web/dataset/search_read') { + assert.deepEqual(args.domain, expectedDomain); + } + return this._super.apply(this, arguments); + }, + }); + + expectedDomain = [['id', 'in', [100, 101, 102, 103, 104, 105, 106, 107]]]; + await testUtils.fields.many2one.searchAndClickItem('trululu', { + item: 'Search More', + search: 'test', + }); + + assert.containsOnce(document.body, '.modal .o_list_view'); + assert.containsOnce(document.body, '.modal .o_cp_searchview .o_facet_values', + "should have a special facet for the pre-selected ids"); + + // remove the filter on ids + expectedDomain = []; + testUtils.dom.click($('.modal .o_cp_searchview .o_facet_remove')); + + assert.verifySteps([ + 'default_get', + 'name_search', // empty search, triggered when the user clicks in the input + 'name_search', // to display results in the dropdown + 'name_search', // to get preselected ids matching the search + 'load_views', // list view in dialog + '/web/dataset/search_read', // to display results in the dialog + '/web/dataset/search_read', // after removal of dynamic filter + ]); + + form.destroy(); + }); + QUnit.test('updating a many2one from a many2many', function (assert) { assert.expect(4); diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js index 09f6852951b..ff75722b333 100644 --- a/addons/web/static/tests/helpers/mock_server.js +++ b/addons/web/static/tests/helpers/mock_server.js @@ -705,8 +705,8 @@ var MockServer = Class.extend({ var result = _.map(records, function (record) { return [record.id, record.display_name]; }); - if (args.limit) { - return result.slice(0, args.limit); + if (_kwargs.limit) { + return result.slice(0, _kwargs.limit); } return result; }, diff --git a/addons/web/static/tests/helpers/test_utils_fields.js b/addons/web/static/tests/helpers/test_utils_fields.js index f7d8829ce82..f0f29839a9d 100644 --- a/addons/web/static/tests/helpers/test_utils_fields.js +++ b/addons/web/static/tests/helpers/test_utils_fields.js @@ -125,15 +125,16 @@ function clickM2OItem(fieldName, searchText) { * - click to open the dropdown * - enter a search string in the input * - wait for the selection - * - click on the active menuitem + * - click on the requested menuitem, or the active one by default * * Example: - * testUtils.fields.many2one.searchAndClickM2OItem('partner_id', 'George'); + * testUtils.fields.many2one.searchAndClickM2OItem('partner_id', {search: 'George'}); * * @param {string} fieldName * @param {[Object]} options * @param {[string]} options.selector * @param {[string]} options.search + * @param {[string]} options.item * @returns {Promise} */ function searchAndClickM2OItem(fieldName, options) { @@ -156,7 +157,11 @@ function searchAndClickM2OItem(fieldName, options) { } return $.when(def).then(function () { - clickM2OHighlightedItem(fieldName, options.selector); + if (options.item) { + clickM2OItem(fieldName, options.item); + } else { + clickM2OHighlightedItem(fieldName, options.selector); + } }); } return { |
