summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/control_panel/control_panel_model_tests.js
diff options
context:
space:
mode:
authorJulien Mougenot <jum@odoo.com>2020-06-25 11:59:14 +0000
committerJulien Mougenot <jum@odoo.com>2020-06-30 07:22:12 +0000
commitc96de07f8593d525dd2992c06add68eb5c2cde8c (patch)
treed1b2f2f1466428b0f458da1af02d8a12ace156f4 /addons/web/static/tests/control_panel/control_panel_model_tests.js
parent7e5ae026fd72d6ec0525f2b70820510bc488ec92 (diff)
[FIX] web: Allow default favorite filter over search default
Before this commit, when a search_default on a many2one field tried to update its label after a name_get, the value was set on its initial associated query element which could have been erased by a default favorite. Now, the model determines whether there is a default favorite before processing default filters, preventing any unnecessary RPC. closes odoo/odoo#53840 X-original-commit: ff834d0ba6f9b7eadc23c28dbbf892eba2058583 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Diffstat (limited to 'addons/web/static/tests/control_panel/control_panel_model_tests.js')
-rw-r--r--addons/web/static/tests/control_panel/control_panel_model_tests.js71
1 files changed, 69 insertions, 2 deletions
diff --git a/addons/web/static/tests/control_panel/control_panel_model_tests.js b/addons/web/static/tests/control_panel/control_panel_model_tests.js
index fb73a58dce6..211912d8ac2 100644
--- a/addons/web/static/tests/control_panel/control_panel_model_tests.js
+++ b/addons/web/static/tests/control_panel/control_panel_model_tests.js
@@ -4,9 +4,9 @@ odoo.define('web.control_panel_model_tests', function (require) {
const ControlPanelModel = require('web.ControlPanelModel');
const makeTestEnvironment = require('web.test_env');
- function createControlPanelModel(config = {}) {
+ function createControlPanelModel(config = {}, env, rpc) {
return new ControlPanelModel(Object.assign(
- { env: makeTestEnvironment() },
+ { env: makeTestEnvironment(env, rpc) },
config
));
}
@@ -356,5 +356,72 @@ 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]]);
+ });
});
});