From cdd6b74b11fece13dd37f39d08f563bc6af9fb00 Mon Sep 17 00:00:00 2001 From: Mathieu Duckerts-Antoine Date: Thu, 16 Feb 2023 12:31:49 +0000 Subject: [PATCH] [FIX] web: support of count_distinct for many2ones in mockReadGroup mockReadGroup should not count the value false for a many2one when aggregating a many2one field with the aggregate function count_distinct and should always return a number. We fix that. Part-of: odoo/odoo#112825 --- .../web/static/tests/helpers/mock_server.js | 4 +- addons/web/static/tests/mock_server_tests.js | 53 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js index 7d49b311850..97cb25ec4d0 100644 --- a/addons/web/static/tests/helpers/mock_server.js +++ b/addons/web/static/tests/helpers/mock_server.js @@ -1051,8 +1051,8 @@ export class MockServer { if (func === "array_agg") { group[name] = ids.map((id) => (id ? id : null)); } else { - const uniqueIds = [...new Set(ids)]; - group[name] = uniqueIds.length || null; + const uniqueIds = [...new Set(ids)].filter((id) => id); + group[name] = uniqueIds.length; } break; } diff --git a/addons/web/static/tests/mock_server_tests.js b/addons/web/static/tests/mock_server_tests.js index 7df06d2cc0d..64978159011 100644 --- a/addons/web/static/tests/mock_server_tests.js +++ b/addons/web/static/tests/mock_server_tests.js @@ -1158,6 +1158,59 @@ QUnit.module("MockServer", (hooks) => { ]); }); + QUnit.test("performRPC: read_group with count_distinct", async function (assert) { + const server = new MockServer(data, {}); + const result1 = await server.performRPC("", { + model: "bar", + method: "read_group", + args: [[]], + kwargs: { + fields: ["aggregateLabel:count_distinct(partner_id)"], + domain: [], + groupby: [], + }, + }); + assert.deepEqual(result1, [ + { + __count: 6, + aggregateLabel: 2, + }, + ]); + const result2 = await server.performRPC("", { + model: "bar", + method: "read_group", + args: [[]], + kwargs: { + fields: ["partner_id:count_distinct"], + domain: [], + groupby: [], + }, + }); + assert.deepEqual(result2, [ + { + __count: 6, + partner_id: 2, + }, + ]); + + const result3 = await server.performRPC("", { + model: "bar", + method: "read_group", + args: [[]], + kwargs: { + fields: ["partner_id:count_distinct"], + domain: [[0, "=", 1]], + groupby: [], + }, + }); + assert.deepEqual(result3, [ + { + __count: 0, + partner_id: 0, + }, + ]); + }); + QUnit.test("performRPC: read_progress_bar grouped by boolean", async (assert) => { const server = new MockServer(data, {}); const result = await server.performRPC("", {