From 01b5d25152a0e293fdd0181c68531ee03b25b876 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 8 Jul 2026 11:18:50 +0100 Subject: [PATCH 1/5] Avoid snapshot in metaspaces order test Just assert the thing we're actually testing rather than a snapshot because I keep having to update this snapshot every time anything in the left panel changes and it's tedious. --- .../views/spaces/SpacePanel-test.tsx | 10 +- .../__snapshots__/SpacePanel-test.tsx.snap | 394 ------------------ 2 files changed, 8 insertions(+), 396 deletions(-) delete mode 100644 apps/web/test/unit-tests/components/views/spaces/__snapshots__/SpacePanel-test.tsx.snap diff --git a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx index 455895b2918..12dc47550f0 100644 --- a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx +++ b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx @@ -153,8 +153,14 @@ describe("", () => { const spySettingsStore = jest.spyOn(SettingsStore, "getValue").mockImplementation((setting) => { return setting === "feature_video_rooms" ? true : originalGetValue(setting); }); - const renderResult = render(); - expect(renderResult.asFragment()).toMatchSnapshot(); + const { container } = render(); + + // Inspect the order of the rendered MetaSpaces, excluding the "Create a space" button. + const metaSpaceLabels = Array.from( + container.querySelectorAll(".mx_SpaceButton:not(.mx_SpaceButton_new)"), + ).map((button) => button.getAttribute("aria-label")); + expect(metaSpaceLabels).toEqual(["Home", "Favourites", "People", "Other rooms", "Conferences"]); + spySettingsStore.mockRestore(); }); diff --git a/apps/web/test/unit-tests/components/views/spaces/__snapshots__/SpacePanel-test.tsx.snap b/apps/web/test/unit-tests/components/views/spaces/__snapshots__/SpacePanel-test.tsx.snap deleted file mode 100644 index fe2240f6334..00000000000 --- a/apps/web/test/unit-tests/components/views/spaces/__snapshots__/SpacePanel-test.tsx.snap +++ /dev/null @@ -1,394 +0,0 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[` should show all activated MetaSpaces in the correct order 1`] = ` - - - -`; From 5a15cad198ef5ee97203c71712bdee196d6d3e97 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 8 Jul 2026 11:23:33 +0100 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=90=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unit-tests/components/views/spaces/SpacePanel-test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx index 12dc47550f0..efb0040e5cb 100644 --- a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx +++ b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx @@ -156,9 +156,9 @@ describe("", () => { const { container } = render(); // Inspect the order of the rendered MetaSpaces, excluding the "Create a space" button. - const metaSpaceLabels = Array.from( - container.querySelectorAll(".mx_SpaceButton:not(.mx_SpaceButton_new)"), - ).map((button) => button.getAttribute("aria-label")); + const metaSpaceLabels = Array.from(container.querySelectorAll(".mx_SpaceButton:not(.mx_SpaceButton_new)")).map( + (button) => button.getAttribute("aria-label"), + ); expect(metaSpaceLabels).toEqual(["Home", "Favourites", "People", "Other rooms", "Conferences"]); spySettingsStore.mockRestore(); From 9fdf72303e1033b51c00a57624f6c212a97819e0 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 8 Jul 2026 17:08:40 +0100 Subject: [PATCH 3/5] Get all the button roles instead --- .../components/views/spaces/SpacePanel-test.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx index efb0040e5cb..a783366baaa 100644 --- a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx +++ b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx @@ -153,12 +153,16 @@ describe("", () => { const spySettingsStore = jest.spyOn(SettingsStore, "getValue").mockImplementation((setting) => { return setting === "feature_video_rooms" ? true : originalGetValue(setting); }); - const { container } = render(); + render(); // Inspect the order of the rendered MetaSpaces, excluding the "Create a space" button. - const metaSpaceLabels = Array.from(container.querySelectorAll(".mx_SpaceButton:not(.mx_SpaceButton_new)")).map( - (button) => button.getAttribute("aria-label"), - ); + const metaSpaceLabels = Array.from(screen.getAllByRole("button")) + .map((button) => button.getAttribute("aria-label")) + .filter( + (label) => + label && + !["User menu", "Expand", "Options", "Create a space", "Threads", "Quick settings"].includes(label), + ); expect(metaSpaceLabels).toEqual(["Home", "Favourites", "People", "Other rooms", "Conferences"]); spySettingsStore.mockRestore(); From 9b557b22804639d6f68e4bb834acdac9e0301464 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 8 Jul 2026 17:35:56 +0100 Subject: [PATCH 4/5] Favourites & people are gone --- .../test/unit-tests/components/views/spaces/SpacePanel-test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx index 5f6b242c238..d4623075e06 100644 --- a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx +++ b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx @@ -157,7 +157,7 @@ describe("", () => { label && !["User menu", "Expand", "Options", "Create a space", "Threads", "Quick settings"].includes(label), ); - expect(metaSpaceLabels).toEqual(["Home", "Favourites", "People", "Other rooms", "Conferences"]); + expect(metaSpaceLabels).toEqual(["Home", "Other rooms", "Conferences"]); spySettingsStore.mockRestore(); }); From f58a0613b8b7b938d2cbebcb9152009b911191e9 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 9 Jul 2026 10:55:00 +0100 Subject: [PATCH 5/5] Query treeitems and then get the buttons from them --- .../views/spaces/SpacePanel-test.tsx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx index d4623075e06..a2e3698ced6 100644 --- a/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx +++ b/apps/web/test/unit-tests/components/views/spaces/SpacePanel-test.tsx @@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details. */ import React from "react"; -import { render, screen, fireEvent, act, cleanup, waitFor } from "jest-matrix-react"; +import { render, screen, fireEvent, act, cleanup, waitFor, within } from "jest-matrix-react"; import { mocked } from "jest-mock"; import { type MatrixClient, type Room } from "matrix-js-sdk/src/matrix"; @@ -150,13 +150,16 @@ describe("", () => { render(); // Inspect the order of the rendered MetaSpaces, excluding the "Create a space" button. - const metaSpaceLabels = Array.from(screen.getAllByRole("button")) - .map((button) => button.getAttribute("aria-label")) - .filter( - (label) => - label && - !["User menu", "Expand", "Options", "Create a space", "Threads", "Quick settings"].includes(label), - ); + const tree = screen.getByRole("tree", { name: "Spaces" }); + const spaceButtons = within(tree) + .getAllByRole("treeitem") + .filter((el) => within(el).queryByRole("button", { name: "Create a space" }) === null); + + const metaSpaceLabels = Array.from(spaceButtons).map((li) => + within(li) + .getByRole("button", { name: /^(?!Options$).*/ }) // filter out the 'options' buttons within the buttons + .getAttribute("aria-label"), + ); expect(metaSpaceLabels).toEqual(["Home", "Other rooms", "Conferences"]); spySettingsStore.mockRestore();