diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js
index 7a488c02c63..4a5fb766b2b 100644
--- a/addons/web/static/tests/views/list_view_tests.js
+++ b/addons/web/static/tests/views/list_view_tests.js
@@ -7041,6 +7041,47 @@ QUnit.module("Views", (hooks) => {
}
);
+ QUnit.test("grouped list keeps offset on switchView", async (assert) => {
+ assert.expect(8);
+ serverData.views = {
+ "foo,false,search": `
+
+
+ `,
+ "foo,99,list": `
`,
+ "foo,100,form": `
`,
+ };
+
+ const offsets = [0, 1, 1];
+ const mockRPC = async (route, args) => {
+ if (args.method === "web_read_group") {
+ assert.strictEqual(args.kwargs.offset, offsets.shift());
+ }
+ };
+ const wc = await createWebClient({ serverData, mockRPC });
+ await doAction(wc, {
+ res_model: "foo",
+ type: "ir.actions.act_window",
+ views: [
+ [99, "list"],
+ [100, "form"],
+ ],
+ context: {
+ search_default_groupby: true,
+ },
+ });
+
+ assert.containsOnce(target, ".o_list_view");
+ await click(target, ".o_pager_next");
+ assert.containsNone(target, ".o_data_row");
+ await click(target, ".o_group_header");
+ assert.containsOnce(target, ".o_data_row");
+ await click(target, ".o_data_cell");
+ assert.containsOnce(target, ".o_form_view");
+ await click(target, ".o_back_button");
+ assert.containsOnce(target, ".o_data_row");
+ });
+
QUnit.test("can sort records when clicking on header", async function (assert) {
serverData.models.foo.fields.foo.sortable = true;