diff options
| author | Julien Mougenot <jum@odoo.com> | 2020-06-25 11:59:14 +0000 |
|---|---|---|
| committer | Julien Mougenot <jum@odoo.com> | 2020-06-30 07:22:12 +0000 |
| commit | c96de07f8593d525dd2992c06add68eb5c2cde8c (patch) | |
| tree | d1b2f2f1466428b0f458da1af02d8a12ace156f4 /addons/web/static/tests/control_panel/control_panel_model_tests.js | |
| parent | 7e5ae026fd72d6ec0525f2b70820510bc488ec92 (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.js | 71 |
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]]); + }); }); }); |
