From 1b94eefe26a719f4b1a58a6363364e12dfbd5491 Mon Sep 17 00:00:00 2001 From: Mathieu Duckerts-Antoine Date: Thu, 22 Jun 2023 12:34:33 +0000 Subject: [PATCH] [FIX] web: domain selector: treat false,true as in py interpreter A string representation of a domain like "[('bar', '=', false)]" is evaluated by py.js the same way as "[('bar', '=', False)]".So both domains are recognized as correct while false is not a valid python expression. We do the same in domain selector, the expression "false" ("true") will be understood as "False" (resp. "True"). Part-of: odoo/odoo#126350 --- .../domain_selector/domain_selector_nodes.js | 2 ++ .../static/tests/core/domain_selector_tests.js | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/addons/web/static/src/core/domain_selector/domain_selector_nodes.js b/addons/web/static/src/core/domain_selector/domain_selector_nodes.js index b4a50a321f4..dfc16822013 100644 --- a/addons/web/static/src/core/domain_selector/domain_selector_nodes.js +++ b/addons/web/static/src/core/domain_selector/domain_selector_nodes.js @@ -128,6 +128,8 @@ export function getValue(ast) { return ast.value; } else if (ast.type === 6 && ast.op === "-" && ast.right.type === 0) { return -ast.right.value; + } else if (ast.type === 5 && ["false", "true"].includes(ast.value)) { + return JSON.parse(ast.value); } else { return new DomainValueExpr(ast); } diff --git a/addons/web/static/tests/core/domain_selector_tests.js b/addons/web/static/tests/core/domain_selector_tests.js index 5d43fd31c92..61582839fde 100644 --- a/addons/web/static/tests/core/domain_selector_tests.js +++ b/addons/web/static/tests/core/domain_selector_tests.js @@ -57,6 +57,11 @@ async function makeDomainSelector(params = {}) { }, }; } + async set(domain) { + this.domainSelectorProps.domain = domain; + this.render(); + await nextTick(); + } } Parent.components = { DomainSelector }; Parent.template = xml``; @@ -1288,4 +1293,15 @@ QUnit.module("Components", (hooks) => { await click(target, ".o_model_field_selector"); await click(target, ".o_model_field_selector_popover_item[data-name=foo] button"); }); + + QUnit.test("treat false and true like False and True", async (assert) => { + const parent = await makeDomainSelector({ + resModel: "partner", + domain: `[("bar","=",false)]`, + readonly: true, + }); + assert.strictEqual(target.querySelector(".o_domain_leaf").textContent, `Baris not set`); + await parent.set(`[("bar","=",true)]`); + assert.strictEqual(target.querySelector(".o_domain_leaf").textContent, `Baris set`); + }); });