Update for compatibility with v12 rooms (#30452)
* Update for compatibility with v12 rooms Stop using powerLevelNorm and reading PL events manually. To support https://github.com/matrix-org/matrix-js-sdk/pull/4937 * Add test for leave space dialog * Don't compute stuff if we don't need it * Use room.client * Use getSafeUserId * Remove client arg * Use getJoinedMembers and add doc * Fix tests * Fix more tests * Fix other test * Clarify comment Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> --------- Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
@@ -691,6 +691,8 @@ describe("<MatrixChat />", () => {
|
||||
jest.spyOn(spaceRoom, "isSpaceRoom").mockReturnValue(true);
|
||||
|
||||
jest.spyOn(ReleaseAnnouncementStore.instance, "getReleaseAnnouncement").mockReturnValue(null);
|
||||
(room as any).client = mockClient;
|
||||
(spaceRoom as any).client = mockClient;
|
||||
});
|
||||
|
||||
describe("forget_room", () => {
|
||||
@@ -775,6 +777,22 @@ describe("<MatrixChat />", () => {
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
it("should warn when user is the last admin", async () => {
|
||||
jest.spyOn(room, "getJoinedMembers").mockReturnValue([
|
||||
{ powerLevel: 100 } as unknown as MatrixJs.RoomMember,
|
||||
{ powerLevel: 0 } as unknown as MatrixJs.RoomMember,
|
||||
]);
|
||||
jest.spyOn(room, "getMember").mockReturnValue({
|
||||
powerLevel: 100,
|
||||
} as unknown as MatrixJs.RoomMember);
|
||||
dispatchAction();
|
||||
await screen.findByRole("dialog");
|
||||
expect(
|
||||
screen.getByText(
|
||||
"You're the only administrator in this room. If you leave, nobody will be able to change room settings or take other important actions.",
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
it("should do nothing on cancel", async () => {
|
||||
dispatchAction();
|
||||
const dialog = await screen.findByRole("dialog");
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { render, screen } from "jest-matrix-react";
|
||||
import { MatrixEvent, type RoomMember } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import LeaveSpaceDialog from "../../../../../src/components/views/dialogs/LeaveSpaceDialog";
|
||||
import { createTestClient, mkStubRoom } from "../../../../test-utils";
|
||||
|
||||
describe("LeaveSpaceDialog", () => {
|
||||
it("should warn about not being able to rejoin non-public space", () => {
|
||||
const mockClient = createTestClient();
|
||||
const mockSpace = mkStubRoom("myfakeroom", "myfakeroom", mockClient) as any;
|
||||
jest.spyOn(mockSpace.currentState, "getStateEvents").mockReturnValue(
|
||||
new MatrixEvent({
|
||||
type: "m.room.join_rules",
|
||||
content: {
|
||||
join_rule: "invite",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
render(<LeaveSpaceDialog space={mockSpace} onFinished={jest.fn()} />);
|
||||
|
||||
expect(screen.getByText(/You won't be able to rejoin unless you are re-invited/)).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("should warn if user is the only admin", () => {
|
||||
const mockClient = createTestClient();
|
||||
const mockSpace = mkStubRoom("myfakeroom", "myfakeroom", mockClient) as any;
|
||||
jest.spyOn(mockSpace, "getJoinedMembers").mockReturnValue([
|
||||
{ powerLevel: 100 } as unknown as RoomMember,
|
||||
{ powerLevel: 0 } as unknown as RoomMember,
|
||||
]);
|
||||
jest.spyOn(mockSpace, "getMember").mockReturnValue({
|
||||
powerLevel: 100,
|
||||
} as unknown as RoomMember);
|
||||
|
||||
render(<LeaveSpaceDialog space={mockSpace} onFinished={jest.fn()} />);
|
||||
|
||||
expect(
|
||||
screen.getByText(/You're the only admin of this space. Leaving it will mean no one has control over it./),
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user