diff --git a/addons/web/static/src/model/relational_model/static_list.js b/addons/web/static/src/model/relational_model/static_list.js index 63a01dc7dd5..62616d0f7ff 100644 --- a/addons/web/static/src/model/relational_model/static_list.js +++ b/addons/web/static/src/model/relational_model/static_list.js @@ -27,7 +27,7 @@ function compareRecords(r1, r2, orderBy, fields) { return 1; } if (orderBy.length > 1) { - return compareRecords(r1, r2, orderBy.slice(1)); + return compareRecords(r1, r2, orderBy.slice(1), fields); } return 0; } diff --git a/addons/web/static/tests/views/fields/one2many_field_tests.js b/addons/web/static/tests/views/fields/one2many_field_tests.js index bee3d16f3d2..a64b413c2fc 100644 --- a/addons/web/static/tests/views/fields/one2many_field_tests.js +++ b/addons/web/static/tests/views/fields/one2many_field_tests.js @@ -2885,9 +2885,9 @@ QUnit.module("Fields", (hooks) => { QUnit.test("sorting one2many fields", async function (assert) { serverData.models.partner.fields.foo.sortable = true; - serverData.models.partner.records.push({ id: 23, foo: "abc" }); - serverData.models.partner.records.push({ id: 24, foo: "xyz" }); - serverData.models.partner.records.push({ id: 25, foo: "def" }); + serverData.models.partner.records.push({ id: 23, foo: "abc", int_field: 1 }); + serverData.models.partner.records.push({ id: 24, foo: "xyz", int_field: 1 }); + serverData.models.partner.records.push({ id: 25, foo: "def", int_field: 2 }); serverData.models.partner.records[0].p = [23, 24, 25]; let rpcCount = 0; @@ -2900,6 +2900,7 @@ QUnit.module("Fields", (hooks) => { + `, @@ -2910,22 +2911,34 @@ QUnit.module("Fields", (hooks) => { }); rpcCount = 0; - assert.strictEqual( - [...target.querySelectorAll(".o_data_cell")].map((c) => c.textContent).join(" "), - "abc xyz def" + assert.deepEqual( + [...target.querySelectorAll(".o_data_cell[name='foo']")].map((c) => c.textContent), + ["abc", "xyz", "def"] ); - await click(target.querySelector("table thead .o_column_sortable")); + await click(target.querySelector("table thead [data-name='foo'].o_column_sortable")); assert.strictEqual(rpcCount, 0, "in memory sort, no RPC should have been done"); - assert.strictEqual( - [...target.querySelectorAll(".o_data_cell")].map((c) => c.textContent).join(" "), - "abc def xyz" + assert.deepEqual( + [...target.querySelectorAll(".o_data_cell[name='foo']")].map((c) => c.textContent), + ["abc", "def", "xyz"] ); - await click(target.querySelector("table thead .o_column_sortable")); - assert.strictEqual( - [...target.querySelectorAll(".o_data_cell")].map((c) => c.textContent).join(" "), - "xyz def abc" + await click(target.querySelector("table thead [data-name='foo'].o_column_sortable")); + assert.deepEqual( + [...target.querySelectorAll(".o_data_cell[name='foo']")].map((c) => c.textContent), + ["xyz", "def", "abc"] + ); + + await click(target.querySelector("table thead [data-name='int_field'].o_column_sortable")); + assert.deepEqual( + [...target.querySelectorAll(".o_data_cell[name='foo']")].map((c) => c.textContent), + ["xyz", "abc", "def"] + ); + + await click(target.querySelector("table thead [data-name='int_field'].o_column_sortable")); + assert.deepEqual( + [...target.querySelectorAll(".o_data_cell[name='foo']")].map((c) => c.textContent), + ["def", "xyz", "abc"] ); });