summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/control_panel
diff options
context:
space:
mode:
authorJulien Mougenot <jum@odoo.com>2020-07-13 13:20:46 +0000
committerMathieu Duckerts-Antoine <dam@odoo.com>2020-07-23 08:21:10 +0000
commitd3dd7b24b0ed55b02479f54f2320781f4f6297bc (patch)
treef18d961c9f7117593d57762ade0237cc1d33b598 /addons/web/static/tests/control_panel
parentbb3bc7c9e4992dc07b10e87f87662bdd72f24d88 (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.js12
-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.js25
-rw-r--r--addons/web/static/tests/control_panel/custom_filter_item_tests.js83
-rw-r--r--addons/web/static/tests/control_panel/custom_group_by_item_tests.js16
-rw-r--r--addons/web/static/tests/control_panel/favorite_menu_tests.js38
-rw-r--r--addons/web/static/tests/control_panel/filter_menu_tests.js57
-rw-r--r--addons/web/static/tests/control_panel/groupby_menu_tests.js54
-rw-r--r--addons/web/static/tests/control_panel/search_bar_tests.js37
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");