From 8359337a6c0bf22558c36645280690bf0de88db6 Mon Sep 17 00:00:00 2001 From: Mathieu Duckerts-Antoine Date: Mon, 4 Jul 2022 11:28:23 +0000 Subject: [PATCH] [FIX] web: kanban: "muted" already in progress bar colors Problem: In a kanban view with progress bars, have - a record with a false value for the progress bar field - "muted" be the color of a progress bar field value different from false a crash occurs. This happens because no fallback is found for value = false in findProgressValueFromRecord. Solution: Always add a bar for the value false (as it was the case before). closes odoo/odoo#95215 Signed-off-by: Aaron Bohy (aab) --- .../static/src/views/kanban/kanban_model.js | 6 +- .../src/views/kanban/kanban_renderer.xml | 2 +- .../static/tests/views/kanban_view_tests.js | 71 +++++++++++++++++++ 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/views/kanban/kanban_model.js b/addons/web/static/src/views/kanban/kanban_model.js index acf5ec79519..e578d023a7f 100644 --- a/addons/web/static/src/views/kanban/kanban_model.js +++ b/addons/web/static/src/views/kanban/kanban_model.js @@ -305,11 +305,7 @@ class KanbanGroup extends Group { /** @type {[string | typeof FALSE, string][]} */ const colorEntries = Object.entries(colors); const selection = fieldSelection && Object.fromEntries(fieldSelection); - - if (!colorEntries.some((v) => v[1] === "muted")) { - colorEntries.push([FALSE, "muted"]); - } - + colorEntries.push([FALSE, "muted"]); return colorEntries.map(([value, color]) => { let string; if (value === FALSE) { diff --git a/addons/web/static/src/views/kanban/kanban_renderer.xml b/addons/web/static/src/views/kanban/kanban_renderer.xml index 35a53c5cae3..16a32c5193d 100644 --- a/addons/web/static/src/views/kanban/kanban_renderer.xml +++ b/addons/web/static/src/views/kanban/kanban_renderer.xml @@ -57,7 +57,7 @@
- +
{ assert.strictEqual(getCardTexts()[0], "yop\nTOGGLER\nMENU"); }); + + QUnit.test("'muted' already in progress bar colors", async (assert) => { + serverData.models.partner.records.push({ id: 5, bar: true }, { id: 6, bar: false }); + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: ` + + + + + + +
+ +
+
+
+
+ `, + groupBy: ["bar"], + }); + + assert.containsN(target, ".o_kanban_group:nth-child(1) .progress-bar", 2); + assert.deepEqual( + [...target.querySelectorAll(".o_kanban_group:nth-child(1) .progress-bar")].map( + (el) => el.dataset.tooltip + ), + ["1 blip", "1 Other"] + ); + assert.containsN(target, ".o_kanban_group:nth-child(2) .progress-bar", 4); + assert.deepEqual( + [...target.querySelectorAll(".o_kanban_group:nth-child(2) .progress-bar")].map( + (el) => el.dataset.tooltip + ), + ["1 yop", "1 gnap", "1 blip", "1 Other"] + ); + assert.deepEqual(getCounters(), ["2", "4"]); + + await click(target.querySelector(".o_kanban_group:nth-child(2) .progress-bar")); + + assert.deepEqual(getCounters(), ["2", "1"]); + assert.strictEqual( + target.querySelector(".o_kanban_group:nth-child(2) .o_kanban_record").innerText, + "ABC" + ); + assert.containsNone(target, ".o_kanban_group:nth-child(2) .o_kanban_load_more"); + + await click( + target.querySelector(".o_kanban_group:nth-child(2) .progress-bar:nth-child(2)") + ); + + assert.deepEqual(getCounters(), ["2", "1"]); + assert.strictEqual( + target.querySelector(".o_kanban_group:nth-child(2) .o_kanban_record").innerText, + "GHI" + ); + assert.containsNone(target, ".o_kanban_group:nth-child(2) .o_kanban_load_more"); + + await click( + target.querySelector(".o_kanban_group:nth-child(2) .progress-bar:nth-child(4)") + ); + + assert.deepEqual(getCounters(), ["2", "1"]); + assert.strictEqual( + target.querySelector(".o_kanban_group:nth-child(2) .o_kanban_record").innerText, + "" + ); + assert.containsNone(target, ".o_kanban_group:nth-child(2) .o_kanban_load_more"); + }); });