From 4aa5f00dc958052d4a17a2dfce848719ad7e70fc Mon Sep 17 00:00:00 2001 From: Mathieu Duckerts-Antoine Date: Mon, 11 Sep 2023 13:45:30 +0200 Subject: [PATCH] [IMP] web: sample server: support of array_agg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In SampleServer, we make _mockReadGroup support array_agg (at least for the field id). closes odoo/odoo#135020 Related: odoo/enterprise#37757 Signed-off-by: Michaƫl Mattiello (mcm) --- addons/web/static/src/model/sample_server.js | 8 +++++--- .../web/static/tests/model/sample_server_tests.js | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/model/sample_server.js b/addons/web/static/src/model/sample_server.js index 4bc87b5042c..015ec87a7c1 100644 --- a/addons/web/static/src/model/sample_server.js +++ b/addons/web/static/src/model/sample_server.js @@ -170,9 +170,11 @@ export class SampleServer { */ _aggregateFields(measures, records) { const values = {}; - for (const { fieldName, type } of measures) { + for (const { fieldName, type, aggregateFunction } of measures) { if (["float", "integer", "monetary"].includes(type)) { - if (records.length) { + if (aggregateFunction === "array_agg") { + values[fieldName] = (records || []).map((r) => r[fieldName]); + } else if (records.length) { let value = 0; for (const record of records) { value += record[fieldName]; @@ -479,7 +481,7 @@ export class SampleServer { type && (type !== "many2one" || aggregateFunction !== "count_distinct") ) { - measures.push({ fieldName: fName, type }); + measures.push({ fieldName: fName, type, aggregateFunction }); } } diff --git a/addons/web/static/tests/model/sample_server_tests.js b/addons/web/static/tests/model/sample_server_tests.js index 43ecc7d4c02..8755420486e 100644 --- a/addons/web/static/tests/model/sample_server_tests.js +++ b/addons/web/static/tests/model/sample_server_tests.js @@ -534,6 +534,21 @@ QUnit.module( assert.strictEqual(result.length, MAIN_RECORDSET_SIZE); }); + QUnit.test("partial support of array_agg", async function (assert) { + fields["res.users"].id = { type: "integer", name: "ID" }; + const server = new DeterministicSampleServer("res.users", fields["res.users"]); + const result = await server.mockRpc({ + method: "read_group", + model: "res.users", + fields: ["unused_label:array_agg(id)"], + groupBy: [], + lazy: false, + }); + assert.strictEqual(result.length, 1); + const ids = new Array(16).fill(0).map((_, index) => index + 1); + assert.deepEqual(result[0].id, ids); + }); + // To be implemented if needed // QUnit.test("Send 'read_progress_bar' RPC", async function (assert) { ... }); }