diff --git a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx index 6519d305c8..544ca55b54 100644 --- a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx +++ b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx @@ -39,6 +39,7 @@ import ProgressBar from "../elements/ProgressBar"; import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar"; import QueryMatcher from "../../../autocomplete/QueryMatcher"; import LazyRenderList from "../elements/LazyRenderList"; +import { useSettingValue } from "../../../hooks/useSettings"; // These values match CSS const ROW_HEIGHT = 32 + 12; @@ -135,7 +136,11 @@ export const AddExistingToSpace: React.FC = ({ onFinished, }) => { const cli = useContext(MatrixClientContext); - const visibleRooms = useMemo(() => cli.getVisibleRooms().filter((r) => r.getMyMembership() === "join"), [cli]); + const msc3946ProcessDynamicPredecessor = useSettingValue("feature_dynamic_room_predecessors"); + const visibleRooms = useMemo( + () => cli.getVisibleRooms(msc3946ProcessDynamicPredecessor).filter((r) => r.getMyMembership() === "join"), + [cli, msc3946ProcessDynamicPredecessor], + ); const scrollRef = useRef>(); const [scrollState, setScrollState] = useState({ diff --git a/test/components/views/spaces/AddExistingToSpaceDialog-test.tsx b/test/components/views/spaces/AddExistingToSpaceDialog-test.tsx new file mode 100644 index 0000000000..3ef4892086 --- /dev/null +++ b/test/components/views/spaces/AddExistingToSpaceDialog-test.tsx @@ -0,0 +1,77 @@ +/* +Copyright 2023 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { render } from "@testing-library/react"; +import { mocked } from "jest-mock"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; +import React from "react"; + +import AddExistingToSpaceDialog from "../../../../src/components/views/dialogs/AddExistingToSpaceDialog"; +import SettingsStore from "../../../../src/settings/SettingsStore"; +import DMRoomMap from "../../../../src/utils/DMRoomMap"; +import { mkSpace, stubClient } from "../../../test-utils"; + +describe("", () => { + it("looks as expected", () => { + const client = stubClient(); + const dialog = renderAddExistingToSpaceDialog(client); + expect(dialog.asFragment()).toMatchSnapshot(); + }); + + describe("If the feature_dynamic_room_predecessors is not enabled", () => { + beforeEach(() => { + jest.spyOn(SettingsStore, "getValue").mockReturnValue(false); + }); + + it("Passes through the dynamic predecessor setting", async () => { + const client = stubClient(); + mocked(client.getVisibleRooms).mockClear(); + renderAddExistingToSpaceDialog(client); + expect(client.getVisibleRooms).toHaveBeenCalledWith(false); + }); + }); + + describe("If the feature_dynamic_room_predecessors is enabled", () => { + beforeEach(() => { + // Turn on feature_dynamic_room_predecessors setting + jest.spyOn(SettingsStore, "getValue").mockImplementation( + (settingName) => settingName === "feature_dynamic_room_predecessors", + ); + }); + + it("Passes through the dynamic predecessor setting", async () => { + const client = stubClient(); + mocked(client.getVisibleRooms).mockClear(); + renderAddExistingToSpaceDialog(client); + expect(client.getVisibleRooms).toHaveBeenCalledWith(true); + }); + }); +}); + +function renderAddExistingToSpaceDialog(client: MatrixClient) { + const dmRoomMap = new DMRoomMap(client); + jest.spyOn(DMRoomMap, "shared").mockReturnValue(dmRoomMap); + const space = mkSpace(client, "!spaceid:example.com"); + const dialog = render( + , + ); + return dialog; +} diff --git a/test/components/views/spaces/__snapshots__/AddExistingToSpaceDialog-test.tsx.snap b/test/components/views/spaces/__snapshots__/AddExistingToSpaceDialog-test.tsx.snap new file mode 100644 index 0000000000..6fd8c23640 --- /dev/null +++ b/test/components/views/spaces/__snapshots__/AddExistingToSpaceDialog-test.tsx.snap @@ -0,0 +1,116 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` looks as expected 1`] = ` + +
+