diff options
| author | Julien Mougenot <jum@odoo.com> | 2020-07-13 13:20:46 +0000 |
|---|---|---|
| committer | Mathieu Duckerts-Antoine <dam@odoo.com> | 2020-07-23 08:21:10 +0000 |
| commit | d3dd7b24b0ed55b02479f54f2320781f4f6297bc (patch) | |
| tree | f18d961c9f7117593d57762ade0237cc1d33b598 /addons/web/static/tests/control_panel | |
| parent | bb3bc7c9e4992dc07b10e87f87662bdd72f24d88 (diff) | |
[IMP] *: adapt tests to Owl search panel
Adaptation of the tests to the changes regarding the refactored search
panel and model.
Part of task 2228968
Co-authored-by: Julien Mougenot <jum@odoo.com>
Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
Diffstat (limited to 'addons/web/static/tests/control_panel')
| -rw-r--r-- | addons/web/static/tests/control_panel/comparison_menu_tests.js | 12 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/control_panel_model_extension_tests.js (renamed from addons/web/static/tests/control_panel/control_panel_model_tests.js) | 160 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/control_panel_tests.js | 25 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/custom_filter_item_tests.js | 83 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/custom_group_by_item_tests.js | 16 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/favorite_menu_tests.js | 38 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/filter_menu_tests.js | 57 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/groupby_menu_tests.js | 54 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/search_bar_tests.js | 37 |
9 files changed, 236 insertions, 246 deletions
diff --git a/addons/web/static/tests/control_panel/comparison_menu_tests.js b/addons/web/static/tests/control_panel/comparison_menu_tests.js index 141250c3bb4..e376904f503 100644 --- a/addons/web/static/tests/control_panel/comparison_menu_tests.js +++ b/addons/web/static/tests/control_panel/comparison_menu_tests.js @@ -18,13 +18,14 @@ odoo.define('web.comparison_menu_tests', function (require) { float_field: { string: "Float", type: "float", group_operator: 'sum' }, foo: { string: "Foo", type: "char", store: true, sortable: true }, }; - this.viewInfo = { + this.cpModelConfig = { arch: ` <search> <filter name="birthday" date="birthday"/> <filter name="date_field" date="date_field"/> </search>`, fields: this.fields, + searchMenuTypes, }; }, }, function () { @@ -36,7 +37,7 @@ odoo.define('web.comparison_menu_tests', function (require) { const unpatchDate = patchDate(1997, 0, 9, 12, 0, 0); const params = { - cpStoreConfig: { viewInfo: this.viewInfo, searchMenuTypes }, + cpModelConfig: this.cpModelConfig, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -71,7 +72,7 @@ odoo.define('web.comparison_menu_tests', function (require) { const unpatchDate = patchDate(1997, 0, 9, 12, 0, 0); const params = { - cpStoreConfig: { viewInfo: this.viewInfo, searchMenuTypes }, + cpModelConfig: this.cpModelConfig, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -125,10 +126,9 @@ odoo.define('web.comparison_menu_tests', function (require) { QUnit.test('no timeRanges key in search query if "comparison" not in searchMenuTypes', async function (assert) { assert.expect(1); + this.cpModelConfig.searchMenuTypes = ['filter']; const params = { - cpStoreConfig: { - viewInfo: this.viewInfo, searchMenuTypes: ['filter'], - }, + cpModelConfig: this.cpModelConfig, cpProps: { fields: this.fields, searchMenuTypes: ['filter'] }, }; const controlPanel = await createControlPanel(params); diff --git a/addons/web/static/tests/control_panel/control_panel_model_tests.js b/addons/web/static/tests/control_panel/control_panel_model_extension_tests.js index 211912d8ac2..3bf2f58d306 100644 --- a/addons/web/static/tests/control_panel/control_panel_model_tests.js +++ b/addons/web/static/tests/control_panel/control_panel_model_extension_tests.js @@ -1,17 +1,31 @@ -odoo.define('web.control_panel_model_tests', function (require) { +odoo.define("web/static/tests/control_panel/control_panel_model_extension_tests.js", function (require) { "use strict"; - const ControlPanelModel = require('web.ControlPanelModel'); + const ActionModel = require("web/static/src/js/views/action_model.js"); const makeTestEnvironment = require('web.test_env'); - function createControlPanelModel(config = {}, env, rpc) { - return new ControlPanelModel(Object.assign( - { env: makeTestEnvironment(env, rpc) }, - config - )); + function createModel(params = {}) { + const archs = (params.arch && { search: params.arch, }) || {}; + const { ControlPanel: controlPanelInfo, } = ActionModel.extractArchInfo(archs); + const extensions = { + ControlPanel: { + context: params.context, + archNodes: controlPanelInfo.children, + dynamicFilters: params.dynamicFilters, + favoriteFilters: params.favoriteFilters, + env: makeTestEnvironment(), + fields: params.fields, + }, + }; + const model = new ActionModel(extensions); + return model; } function sanitizeFilters(model) { - return Object.values(model.state.filters).map(filter => { + const cpme = model.extensions[0].find( + (ext) => ext.constructor.name === "ControlPanelModelExtension" + ); + const filters = Object.values(cpme.state.filters); + return filters.map(filter => { const copy = Object.assign({}, filter); delete copy.groupId; delete copy.groupNumber; @@ -20,7 +34,7 @@ odoo.define('web.control_panel_model_tests', function (require) { }); } - QUnit.module('ControlPanelModel', { + QUnit.module('ControlPanelModelExtension', { beforeEach() { this.fields = { display_name: { string: "Displayed name", type: 'char' }, @@ -33,21 +47,20 @@ odoo.define('web.control_panel_model_tests', function (require) { }, function () { QUnit.module('Arch parsing'); - QUnit.test('empty arch', function (assert) { + QUnit.test('empty arch', async function (assert) { assert.expect(1); - - const model = createControlPanelModel(); + const model = createModel(); assert.deepEqual(sanitizeFilters(model), []); }); - QUnit.test('one field tag', function (assert) { + QUnit.test('one field tag', async function (assert) { assert.expect(1); const arch = ` <search> <field name="bar"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { description: "Bar", @@ -58,18 +71,18 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('one separator tag', function (assert) { + QUnit.test('one separator tag', async function (assert) { assert.expect(1); const arch = ` - <search> - <separator/> - </search>`; + <search> + <separator/> + </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), []); }); - QUnit.test('one separator tag and one field tag', function (assert) { + QUnit.test('one separator tag and one field tag', async function (assert) { assert.expect(1); const arch = ` <search> @@ -77,7 +90,7 @@ odoo.define('web.control_panel_model_tests', function (require) { <field name="bar"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { description: "Bar", @@ -88,14 +101,14 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('one filter tag', function (assert) { + QUnit.test('one filter tag', async function (assert) { assert.expect(1); const arch = ` <search> <filter name="filter" string="Hello" domain="[]"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { description: "Hello", @@ -105,15 +118,15 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('one filter tag with date attribute', function (assert) { + QUnit.test('one filter tag with date attribute', async function (assert) { assert.expect(1); const arch = ` <search> <filter name="date_filter" string="Date" date="date_field"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); - const dateFilterId = Object.values(model.state.filters)[0].id; + const model = createModel({ arch, fields, }); + const dateFilterId = Object.values(model.get('filters'))[0].id; assert.deepEqual(sanitizeFilters(model), [ { defaultOptionId: "this_month", @@ -139,14 +152,14 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('one groupBy tag', function (assert) { + QUnit.test('one groupBy tag', async function (assert) { assert.expect(1); const arch = ` <search> <filter name="groupby" string="Hi" context="{ 'group_by': 'date_field:day'}"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { defaultOptionId: "day", @@ -159,7 +172,7 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('two filter tags', function (assert) { + QUnit.test('two filter tags', async function (assert) { assert.expect(1); const arch = ` <search> @@ -167,7 +180,7 @@ odoo.define('web.control_panel_model_tests', function (require) { <filter name="filter_2" string="Hello Two" domain="[('bar', '=', 3)]"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { description: "Hello One", @@ -182,7 +195,7 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('two filter tags separated by a separator', function (assert) { + QUnit.test('two filter tags separated by a separator', async function (assert) { assert.expect(1); const arch = ` <search> @@ -191,7 +204,7 @@ odoo.define('web.control_panel_model_tests', function (require) { <filter name="filter_2" string="Hello Two" domain="[('bar', '=', 3)]"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { description: "Hello One", @@ -206,7 +219,7 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('one filter tag and one field', function (assert) { + QUnit.test('one filter tag and one field', async function (assert) { assert.expect(1); const arch = ` <search> @@ -214,7 +227,7 @@ odoo.define('web.control_panel_model_tests', function (require) { <field name="bar"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { description: "Hello", @@ -230,7 +243,7 @@ odoo.define('web.control_panel_model_tests', function (require) { ]); }); - QUnit.test('two field tags', function (assert) { + QUnit.test('two field tags', async function (assert) { assert.expect(1); const arch = ` <search> @@ -238,7 +251,7 @@ odoo.define('web.control_panel_model_tests', function (require) { <field name="bar"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields } }); + const model = createModel({ arch, fields, }); assert.deepEqual(sanitizeFilters(model), [ { description: "Foo", @@ -270,7 +283,7 @@ odoo.define('web.control_panel_model_tests', function (require) { domain: "[('user_id', '=', uid)]", }]; - const model = createControlPanelModel({ viewInfo: { favoriteFilters } }); + const model = createModel({ favoriteFilters }); assert.deepEqual(sanitizeFilters(model), [ { context: {}, @@ -303,7 +316,7 @@ odoo.define('web.control_panel_model_tests', function (require) { domain: [['id', 'in', [1, 3, 4]]] }]; - const model = createControlPanelModel({ dynamicFilters }); + const model = createModel({ dynamicFilters }); assert.deepEqual(sanitizeFilters(model), [ { description: 'Quick search', @@ -318,7 +331,7 @@ odoo.define('web.control_panel_model_tests', function (require) { QUnit.test('falsy search defaults are not activated', async function (assert) { assert.expect(1); - const actionContext = { + const context = { search_default_filter: false, search_default_bar: 0, search_default_groupby: 2, @@ -330,7 +343,7 @@ odoo.define('web.control_panel_model_tests', function (require) { <field name="bar"/> </search>`; const fields = this.fields; - const model = createControlPanelModel({ viewInfo: { arch, fields }, actionContext }); + const model = createModel({ arch, fields, context }); // only the truthy filter 'groupby' has isDefault true assert.deepEqual(sanitizeFilters(model), [ { @@ -356,72 +369,5 @@ odoo.define('web.control_panel_model_tests', function (require) { }); - QUnit.test('search default field many2one with filter domain', async function (assert) { - assert.expect(3); - - const actionContext = { - search_default_bar: 20, - }; - const arch = ` - <search> - <field name="bar" string="Partner" filter_domain="[('bar', 'ilike', self)]"/> - </search>`; - const fields = this.fields; - const model = createControlPanelModel( - { viewInfo: { arch, fields }, actionContext }, {}, - async function mockRPC(route, params) { - assert.deepEqual(params, { - args: [20], - kwargs: {}, - method: "name_get", - model: "partner", - }); - return [[20, "Gandalf"]]; - } - ); - - // Labels not fetched: self = undefined - assert.throws(() => model.getQuery()); - - await model.isReady; - - // Labels fetched: domain should be ready - assert.deepEqual(model.getQuery().domain, [["bar", "ilike", "Gandalf"]]); - }); - - QUnit.test('search default field many2one with filter domain and default favorite', async function (assert) { - assert.expect(2); - - const actionContext = { - search_default_bar: 20, - }; - const arch = ` - <search> - <field name="bar" string="Partner" filter_domain="[('bar', 'ilike', self)]"/> - </search>`; - const favoriteFilters = [{ - domain: "[('user_id', '=', uid)]", - id: 5, - is_default: true, - name: 'Sorted filter', - user_id: [2, "Mitchell Admin"], - }]; - const fields = this.fields; - const model = createControlPanelModel( - { viewInfo: { arch, favoriteFilters, fields }, actionContext }, - { session: { user_context: { uid: 2 } } }, - async function mockRPC() { - throw new Error("There should be no name_get"); - } - ); - - // Labels not fetched, but favorite overrides search_default - assert.deepEqual(model.getQuery().domain, [["user_id", "=", 2]]); - - await model.isReady; - - // domain should be the same - assert.deepEqual(model.getQuery().domain, [["user_id", "=", 2]]); - }); }); }); diff --git a/addons/web/static/tests/control_panel/control_panel_tests.js b/addons/web/static/tests/control_panel/control_panel_tests.js index c2dce2eb16f..24744291cc9 100644 --- a/addons/web/static/tests/control_panel/control_panel_tests.js +++ b/addons/web/static/tests/control_panel/control_panel_tests.js @@ -24,12 +24,11 @@ odoo.define('web.control_panel_tests', function (require) { assert.expect(2); const params = { - cpStoreConfig: { - viewInfo: { - arch: `<search> <field name="foo"/></search>`, - fields: this.fields, - }, - actionContext: { search_default_foo: "a" }, + cpModelConfig: { + arch: `<search> <field name="foo"/></search>`, + fields: this.fields, + context: { search_default_foo: "a" }, + searchMenuTypes: ['filter'], }, cpProps: { fields: this.fields }, }; @@ -67,9 +66,10 @@ odoo.define('web.control_panel_tests', function (require) { </search>`; const searchMenuTypes = ['filter', 'groupBy']; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, - actionContext: { + cpModelConfig: { + arch, + fields: this.fields, + context: { show_filterC: true, search_default_display_name: 'value', search_default_filterB: true, @@ -179,9 +179,10 @@ odoo.define('web.control_panel_tests', function (require) { const arch = `<search/>`; const searchMenuTypes = ['filter']; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, - searchMenuTypes + cpModelConfig: { + arch, + fields: this.fields, + searchMenuTypes, }, cpProps: { fields: this.fields, searchMenuTypes }, }; diff --git a/addons/web/static/tests/control_panel/custom_filter_item_tests.js b/addons/web/static/tests/control_panel/custom_filter_item_tests.js index 7602f56aae0..2fa4c5e4e57 100644 --- a/addons/web/static/tests/control_panel/custom_filter_item_tests.js +++ b/addons/web/static/tests/control_panel/custom_filter_item_tests.js @@ -3,7 +3,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { const Domain = require('web.Domain'); const CustomFilterItem = require('web.CustomFilterItem'); - const { Model } = require('web.model'); + const ActionModel = require('web/static/src/js/views/action_model.js'); const pyUtils = require('web.py_utils'); const testUtils = require('web.test_utils'); @@ -33,7 +33,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { fields: this.fields, }, env: { - controlPanelModel: new Model(), + searchModel: new ActionModel(), }, }); @@ -71,20 +71,22 @@ odoo.define('web.filter_menu_generator_tests', function (require) { }); QUnit.test('selection field: default and updated value', async function (assert) { - assert.expect(2); + assert.expect(4); let expectedFilters; - class MockedControlPanelModel extends Model { - createNewFilters(preFilters) { + class MockedSearchModel extends ActionModel { + dispatch(method, ...args) { + assert.strictEqual(method, 'createNewFilters'); + const preFilters = args[0]; assert.deepEqual(preFilters, expectedFilters); } } - const controlPanelModel = new MockedControlPanelModel(); + const searchModel = new MockedSearchModel(); const cfi = await createComponent(CustomFilterItem, { props: { fields: this.fields, }, - env: { controlPanelModel }, + env: { searchModel }, }); // Default value @@ -112,23 +114,26 @@ odoo.define('web.filter_menu_generator_tests', function (require) { }); QUnit.test('adding a simple filter works', async function (assert) { - assert.expect(5); + assert.expect(6); delete this.fields.date_field; - class MockedControlPanelModel extends Model { - createNewFilters(preFilters) { + + class MockedSearchModel extends ActionModel { + dispatch(method, ...args) { + assert.strictEqual(method, 'createNewFilters'); + const preFilters = args[0]; const preFilter = preFilters[0]; assert.strictEqual(preFilter.type, 'filter'); assert.strictEqual(preFilter.description, 'Boolean Field is true'); assert.strictEqual(preFilter.domain, '[["boolean_field","=",True]]'); } } - const controlPanelModel = new MockedControlPanelModel(); + const searchModel = new MockedSearchModel(); const cfi = await createComponent(CustomFilterItem, { props: { fields: this.fields, }, - env: { controlPanelModel }, + env: { searchModel }, }); await cpHelpers.toggleAddCustomFilter(cfi); @@ -142,7 +147,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { }); QUnit.test('commit search with an extended proposition with field char does not cause a crash', async function (assert) { - assert.expect(6); + assert.expect(12); this.fields.many2one_field = { name: 'many2one_field', string: "Trululu", type: "many2one", searchable: true }; const expectedDomains = [ @@ -154,8 +159,11 @@ odoo.define('web.filter_menu_generator_tests', function (require) { [['many2one_field', 'ilike', `\\`]], ]; const testedValues = [`a`, `"a"`, `'a'`, `'`, `"`, `\\`]; - class MockedControlPanelModel extends Model { - createNewFilters(preFilters) { + + class MockedSearchModel extends ActionModel { + dispatch(method, ...args) { + assert.strictEqual(method, 'createNewFilters'); + const preFilters = args[0]; const preFilter = preFilters[0]; // this step combine a tokenization/parsing followed by a string formatting let domain = pyUtils.assembleDomains([preFilter.domain]); @@ -163,12 +171,12 @@ odoo.define('web.filter_menu_generator_tests', function (require) { assert.deepEqual(domain, expectedDomains.shift()); } } - const controlPanelModel = new MockedControlPanelModel(); + const searchModel = new MockedSearchModel(); const cfi = await createComponent(CustomFilterItem, { props: { fields: this.fields, }, - env: { controlPanelModel }, + env: { searchModel }, }); async function testValue(value) { @@ -186,14 +194,17 @@ odoo.define('web.filter_menu_generator_tests', function (require) { await testValue(value); } + delete ActionModel.registry.map.testExtension; cfi.destroy(); }); QUnit.test('custom filter datetime with equal operator', async function (assert) { - assert.expect(4); + assert.expect(5); - class MockedControlPanelModel extends Model { - createNewFilters(preFilters) { + class MockedSearchModel extends ActionModel { + dispatch(method, ...args) { + assert.strictEqual(method, 'createNewFilters'); + const preFilters = args[0]; const preFilter = preFilters[0]; assert.strictEqual(preFilter.description, 'DateTime is equal to "02/22/2017 11:00:00"', @@ -201,9 +212,9 @@ odoo.define('web.filter_menu_generator_tests', function (require) { assert.deepEqual(preFilter.domain, '[["date_time_field","=","2017-02-22 15:00:00"]]', "domain should be in UTC format"); + } } - } - const controlPanelModel = new MockedControlPanelModel(); + const searchModel = new MockedSearchModel(); const cfi = await createComponent(CustomFilterItem, { props: { fields: this.fields, @@ -213,7 +224,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { return -240; }, }, - env: { controlPanelModel }, + env: { searchModel }, }); await cpHelpers.toggleAddCustomFilter(cfi); @@ -230,10 +241,12 @@ odoo.define('web.filter_menu_generator_tests', function (require) { }); QUnit.test('custom filter datetime between operator', async function (assert) { - assert.expect(4); + assert.expect(5); - class MockedControlPanelModel extends Model { - createNewFilters(preFilters) { + class MockedSearchModel extends ActionModel { + dispatch(method, ...args) { + assert.strictEqual(method, 'createNewFilters'); + const preFilters = args[0]; const preFilter = preFilters[0]; assert.strictEqual(preFilter.description, 'DateTime is between "02/22/2017 11:00:00 and 02/22/2017 17:00:00"', @@ -244,7 +257,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { "domain should be in UTC format"); } } - const controlPanelModel = new MockedControlPanelModel(); + const searchModel = new MockedSearchModel(); const cfi = await createComponent(CustomFilterItem, { props: { fields: this.fields, @@ -254,7 +267,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { return -240; }, }, - env: { controlPanelModel }, + env: { searchModel }, }); await cpHelpers.toggleAddCustomFilter(cfi); @@ -279,7 +292,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { fields: this.fields, }, env: { - controlPanelModel: new Model(), + searchModel: new ActionModel(), }, }); @@ -312,10 +325,12 @@ odoo.define('web.filter_menu_generator_tests', function (require) { }); QUnit.test('add custom filter with multiple values', async function (assert) { - assert.expect(1); + assert.expect(2); - class MockedControlPanelModel extends Model { - createNewFilters(preFilters) { + class MockedSearchModel extends ActionModel { + dispatch(method, ...args) { + assert.strictEqual(method, 'createNewFilters'); + const preFilters = args[0]; const expected = [ { description: 'A date is equal to "01/09/1997"', @@ -342,12 +357,12 @@ odoo.define('web.filter_menu_generator_tests', function (require) { "Conditions should be in the correct order witht the right values."); } } - const controlPanelModel = new MockedControlPanelModel(); + const searchModel = new MockedSearchModel(); const cfi = await createComponent(CustomFilterItem, { props: { fields: this.fields, }, - env: { controlPanelModel }, + env: { searchModel }, }); await cpHelpers.toggleAddCustomFilter(cfi); diff --git a/addons/web/static/tests/control_panel/custom_group_by_item_tests.js b/addons/web/static/tests/control_panel/custom_group_by_item_tests.js index 957668a2dae..ee8d0331d67 100644 --- a/addons/web/static/tests/control_panel/custom_group_by_item_tests.js +++ b/addons/web/static/tests/control_panel/custom_group_by_item_tests.js @@ -2,7 +2,7 @@ odoo.define('web.groupby_menu_generator_tests', function (require) { "use strict"; const CustomGroupByItem = require('web.CustomGroupByItem'); - const { Model } = require('web.model'); + const ActionModel = require('web/static/src/js/views/action_model.js'); const testUtils = require('web.test_utils'); const { createComponent } = testUtils; @@ -21,7 +21,7 @@ odoo.define('web.groupby_menu_generator_tests', function (require) { ], }, env: { - controlPanelModel: new Model(), + searchModel: new ActionModel(), }, }); @@ -43,20 +43,22 @@ odoo.define('web.groupby_menu_generator_tests', function (require) { }); QUnit.test('select a field name in Add Custom Group menu properly trigger the corresponding field', async function (assert) { - assert.expect(3); + assert.expect(4); const fields = [ { sortable: true, name: 'candlelight', string: 'Candlelight', type: 'boolean' }, ]; - class MockedControlPanelModel extends Model { - createNewGroupBy(field) { + class MockedSearchModel extends ActionModel { + dispatch(method, ...args) { + assert.strictEqual(method, 'createNewGroupBy'); + const field = args[0]; assert.deepEqual(field, fields[0]); } } - const controlPanelModel = new MockedControlPanelModel(); + const searchModel = new MockedSearchModel(); const cgi = await createComponent(CustomGroupByItem, { props: { fields }, - env: { controlPanelModel }, + env: { searchModel }, }); await testUtils.dom.click(cgi.el.querySelector('.o_generator_menu button.o_add_custom_group_by')); diff --git a/addons/web/static/tests/control_panel/favorite_menu_tests.js b/addons/web/static/tests/control_panel/favorite_menu_tests.js index 9c404d0eb17..d01afdfb063 100644 --- a/addons/web/static/tests/control_panel/favorite_menu_tests.js +++ b/addons/web/static/tests/control_panel/favorite_menu_tests.js @@ -28,7 +28,7 @@ odoo.define('web.favorite_menu_tests', function (require) { assert.expect(8); const params = { - cpStoreConfig: { searchMenuTypes }, + cpModelConfig: { searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes, action: { name: "Action Name" } }, }; const controlPanel = await createControlPanel(params); @@ -61,7 +61,7 @@ odoo.define('web.favorite_menu_tests', function (require) { assert.expect(11); const params = { - cpStoreConfig: { + cpModelConfig: { viewInfo: { fields: this.fields }, searchMenuTypes }, @@ -109,8 +109,8 @@ odoo.define('web.favorite_menu_tests', function (require) { assert.expect(1); const params = { - cpStoreConfig: { - viewInfo: { fields: this.fields }, + cpModelConfig: { + fields: this.fields, searchMenuTypes }, cpProps: { @@ -156,10 +156,11 @@ odoo.define('web.favorite_menu_tests', function (require) { </search> `; const params = { - cpStoreConfig: { - viewInfo: { fields: {}, arch }, + cpModelConfig: { + fields: {}, + arch , searchMenuTypes, - actionContext: { + context: { search_default_positive: true, } }, @@ -202,8 +203,9 @@ odoo.define('web.favorite_menu_tests', function (require) { const arch = `<search><field name="foo"/></search>`; const params = { - cpStoreConfig: { - viewInfo: { fields: this.fields, arch }, + cpModelConfig: { + fields: this.fields, + arch , searchMenuTypes, }, cpProps: { @@ -258,7 +260,7 @@ odoo.define('web.favorite_menu_tests', function (require) { user_id: [2, "Mitchell Admin"], }]; const params = { - cpStoreConfig: { viewInfo: { favoriteFilters }, searchMenuTypes }, + cpModelConfig: { favoriteFilters, searchMenuTypes }, cpProps: { searchMenuTypes, action: {} }, search: function (searchQuery) { const { domain } = searchQuery; @@ -305,10 +307,10 @@ odoo.define('web.favorite_menu_tests', function (require) { user_id: [2, "Mitchell Admin"], }]; const params = { - cpStoreConfig: { - viewInfo: { favoriteFilters }, + cpModelConfig: { + favoriteFilters, searchMenuTypes, - actionContext: { search_disable_custom_filters: true } + context: { search_disable_custom_filters: true } }, cpProps: { searchMenuTypes, action: {} }, }; @@ -354,10 +356,12 @@ odoo.define('web.favorite_menu_tests', function (require) { `; const searchMenuTypes = ['filter', 'groupBy', 'comparison', 'favorite']; const params = { - cpStoreConfig: { - viewInfo: { favoriteFilters, arch, fields: this.fields }, + cpModelConfig: { + favoriteFilters, + arch, + fields: this.fields, searchMenuTypes, - actionContext: { + context: { search_default_positive: true, search_default_coolName: true, search_default_foo: "a", @@ -442,7 +446,7 @@ odoo.define('web.favorite_menu_tests', function (require) { user_id: [2, "Mitchell Admin"], }]; const params = { - cpStoreConfig: { viewInfo: { favoriteFilters }, searchMenuTypes }, + cpModelConfig: { favoriteFilters, searchMenuTypes }, cpProps: { searchMenuTypes, action: {} }, 'get-controller-query-params': function (callback) { callback(); diff --git a/addons/web/static/tests/control_panel/filter_menu_tests.js b/addons/web/static/tests/control_panel/filter_menu_tests.js index 15a41a21aea..baba1d39840 100644 --- a/addons/web/static/tests/control_panel/filter_menu_tests.js +++ b/addons/web/static/tests/control_panel/filter_menu_tests.js @@ -23,7 +23,7 @@ odoo.define('web.filter_menu_tests', function (require) { assert.expect(2); const params = { - cpStoreConfig: { searchMenuTypes }, + cpModelConfig: { searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -43,7 +43,7 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Foo" name="foo" domain="[]"/> </search>`; const params = { - cpStoreConfig: { viewInfo: { arch, fields: this.fields }, searchMenuTypes }, + cpModelConfig: { arch, fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -60,7 +60,7 @@ odoo.define('web.filter_menu_tests', function (require) { assert.expect(2); const params = { - cpStoreConfig: { viewInfo: { fields: this.fields }, searchMenuTypes }, + cpModelConfig: { fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -86,7 +86,7 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Foo" name="foo" domain="[['foo', '=', 'qsdf']]"/> </search>`; const params = { - cpStoreConfig: { viewInfo: { arch }, searchMenuTypes }, + cpModelConfig: { arch, searchMenuTypes }, cpProps: { fields: {}, searchMenuTypes }, search: function (searchQuery) { const { domain } = searchQuery; @@ -118,7 +118,7 @@ odoo.define('web.filter_menu_tests', function (require) { assert.expect(1); const params = { - cpStoreConfig: { viewInfo: { fields: this.fields }, searchMenuTypes }, + cpModelConfig: { fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -144,7 +144,7 @@ odoo.define('web.filter_menu_tests', function (require) { const unpatchDate = patchDate(2020, 1, 5, 12, 20, 0); const params = { - cpStoreConfig: { viewInfo: { fields: this.fields }, searchMenuTypes }, + cpModelConfig: { fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -207,10 +207,11 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Date" name="date_field" date="date_field"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { search_default_date_field: 1 }, + context: { search_default_date_field: 1 }, }, cpProps: { fields: this.fields, searchMenuTypes }, search: function (searchQuery) { @@ -291,10 +292,11 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Date" name="some_filter" date="date_field" default_period="last_month"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { search_default_some_filter: 1 }, + context: { search_default_some_filter: 1 }, }, cpProps: { fields: this.fields, searchMenuTypes }, }; @@ -328,8 +330,9 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Filter" name="some_filter" domain="[]" context="{'coucou_1': 1}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, @@ -358,8 +361,9 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Foo" name="gently_weeps" domain="${_.escape(xml_domain)}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, }, cpProps: { fields: this.fields, searchMenuTypes }, @@ -388,10 +392,11 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Date" name="date_field" date="date_field" default_period="last_month"/> </search>`, params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { + context: { search_default_date_field: true } }, @@ -416,10 +421,11 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="Filter 2 GROUP 2" name="f2_g2" domain="[['foo', '=', 'f2_g2']]"/> </search>`, params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { + context: { search_default_f_1_g1: true, search_default_f1_g2: true, search_default_f2_g2: true, @@ -474,8 +480,9 @@ odoo.define('web.filter_menu_tests', function (require) { <filter string="11" name="coolName11" domain="[]"/> </search>`, params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, }, cpProps: { fields: this.fields, searchMenuTypes }, @@ -493,4 +500,4 @@ odoo.define('web.filter_menu_tests', function (require) { controlPanel.destroy(); }); }); -});
\ No newline at end of file +}); diff --git a/addons/web/static/tests/control_panel/groupby_menu_tests.js b/addons/web/static/tests/control_panel/groupby_menu_tests.js index 9d68db30158..1239f0885fb 100644 --- a/addons/web/static/tests/control_panel/groupby_menu_tests.js +++ b/addons/web/static/tests/control_panel/groupby_menu_tests.js @@ -26,7 +26,7 @@ odoo.define('web.groupby_menu_tests', function (require) { assert.expect(1); const params = { - cpStoreConfig: { searchMenuTypes }, + cpModelConfig: { searchMenuTypes }, cpProps: { fields: {}, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -40,7 +40,7 @@ odoo.define('web.groupby_menu_tests', function (require) { assert.expect(5); const params = { - cpStoreConfig: { searchMenuTypes }, + cpModelConfig: { searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -67,7 +67,7 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Groupby Foo" name="gb_foo" context="{'group_by': 'foo'}"/> </search>`; const params = { - cpStoreConfig: { viewInfo: { arch, fields: this.fields }, searchMenuTypes }, + cpModelConfig: { arch, fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -90,7 +90,7 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Groupby Foo" name="gb_foo" context="{'group_by': 'foo'}"/> </search>`; const params = { - cpStoreConfig: { viewInfo: { arch, fields: this.fields }, searchMenuTypes }, + cpModelConfig: {arch, fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, search: function (searchQuery) { const { groupBy } = searchQuery; @@ -125,7 +125,7 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Groupby Foo" name="gb_foo" context="{'group_by': 'foo'}"/> </search>`; const params = { - cpStoreConfig: { viewInfo: { arch, fields: this.fields }, searchMenuTypes }, + cpModelConfig: { arch, fields: this.fields, searchMenuTypes }, cpProps: { fields: this.fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -147,10 +147,11 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Groupby Foo" name="gb_foo" context="{'group_by': 'foo'}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { search_default_gb_foo: 1 } + context: { search_default_gb_foo: 1 } }, cpProps: { fields: this.fields, searchMenuTypes }, search: function (searchQuery) { @@ -189,10 +190,11 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Date" name="date" context="{'group_by': 'date_field:week'}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { search_default_date: 1 } + context: { search_default_date: 1 } }, cpProps: { fields: this.fields, searchMenuTypes }, search: function (searchQuery) { @@ -251,10 +253,11 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Foo" name="foo" context="{'group_by': 'foo'}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { search_default_bar: 1 } + context: { search_default_bar: 1 } }, cpProps: { fields: this.fields, searchMenuTypes }, }; @@ -309,7 +312,7 @@ odoo.define('web.groupby_menu_tests', function (require) { id: { sortable: true, string: 'ID', type: 'integer' } }; const params = { - cpStoreConfig: { searchMenuTypes }, + cpModelConfig: { searchMenuTypes }, cpProps: { fields, searchMenuTypes }, }; const controlPanel = await createControlPanel(params); @@ -332,7 +335,7 @@ odoo.define('web.groupby_menu_tests', function (require) { id: { sortable: true, string: 'ID', type: 'integer' } }; const params = { - cpStoreConfig: { viewInfo: { fields }, searchMenuTypes }, + cpModelConfig: { fields, searchMenuTypes }, cpProps: { fields, searchMenuTypes }, search: function (searchQuery) { const { groupBy } = searchQuery; @@ -363,10 +366,11 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Date" name="date" context="{'group_by': 'date_field:week'}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { search_default_birthday: 2, search_default_date: 1 } + context: { search_default_birthday: 2, search_default_date: 1 } }, cpProps: { fields: this.fields, searchMenuTypes }, }; @@ -391,8 +395,9 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Bar" name="superName" context="{'group_by': 'bar'}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, }, cpProps: { fields: this.fields, searchMenuTypes }, @@ -453,10 +458,11 @@ odoo.define('web.groupby_menu_tests', function (require) { <filter string="Date" name="date" context="{'group_by': 'foo'}"/> </search>`; const params = { - cpStoreConfig: { - viewInfo: { arch, fields: this.fields }, + cpModelConfig: { + arch, + fields: this.fields, searchMenuTypes, - actionContext: { search_default_birthday: false, search_default_foo: 0 } + context: { search_default_birthday: false, search_default_foo: 0 } }, cpProps: { fields: this.fields, searchMenuTypes }, }; diff --git a/addons/web/static/tests/control_panel/search_bar_tests.js b/addons/web/static/tests/control_panel/search_bar_tests.js index 412688aa52c..b7f5fc8956d 100644 --- a/addons/web/static/tests/control_panel/search_bar_tests.js +++ b/addons/web/static/tests/control_panel/search_bar_tests.js @@ -1,7 +1,8 @@ odoo.define('web.search_bar_tests', function (require) { "use strict"; - const { Model } = require('web.model'); + const { Model } = require('web/static/src/js/model.js'); + const Registry = require("web.Registry"); const SearchBar = require('web.SearchBar'); const testUtils = require('web.test_utils'); @@ -173,22 +174,30 @@ odoo.define('web.search_bar_tests', function (require) { assert.expect(9); const fields = this.data.partner.fields; - class MockedControlPanelModel extends Model { - getFacets() { - return []; - } - getFiltersOfType() { - return Object.keys(fields).map((fname, index) => Object.assign({ - description: fields[fname].string, - fieldName: fname, - fieldType: fields[fname].type, - id: index, - }, fields[fname])); + + class TestModelExtension extends Model.Extension { + get(property) { + switch (property) { + case 'facets': + return []; + case 'filters': + return Object.keys(fields).map((fname, index) => Object.assign({ + description: fields[fname].string, + fieldName: fname, + fieldType: fields[fname].type, + id: index, + }, fields[fname])); + default: + break; + } } } + class MockedModel extends Model { } + MockedModel.registry = new Registry({ Test: TestModelExtension, }); + const searchModel = new MockedModel({ Test: {} }); const searchBar = await createComponent(SearchBar, { data: this.data, - env: { controlPanelModel: new MockedControlPanelModel() }, + env: { searchModel }, props: { fields }, }); const input = searchBar.el.querySelector('.o_searchview_input'); @@ -477,7 +486,7 @@ odoo.define('web.search_bar_tests', function (require) { const searchInput = actionManager.el.querySelector('.o_searchview_input'); searchInput.value = "ABC"; await testUtils.dom.triggerEvent(searchInput, 'input', - { inputType: 'insertFromPaste' }); + { inputType: 'insertFromPaste' }); await testUtils.nextTick(); assert.containsOnce(actionManager, '.o_searchview_autocomplete', "should display autocomplete dropdown menu on paste in search view"); |
