mirror of
https://github.com/vector-im/element-web.git
synced 2026-05-04 19:56:45 +02:00
Fix flaky MemberListView tests (#31707)
Replace unreliable setTimeout(1000) with proper waitFor() patterns for async assertions. Fixes element-hq/element-web#31251 Fixes element-hq/element-web#31582 Signed-off-by: aditya-cherukuru <cherukuru.aditya01@gmail.com>
This commit is contained in:
parent
fb060721dc
commit
04800c15af
@ -71,7 +71,7 @@ describe("MemberListHeaderView", () => {
|
||||
memberListRoom.currentState.members[newMember.userId] = newMember;
|
||||
}
|
||||
await reRender();
|
||||
expect(screen.queryByPlaceholderText("Search room members")).toBeVisible();
|
||||
await waitFor(() => expect(screen.queryByPlaceholderText("Search room members")).toBeVisible());
|
||||
});
|
||||
|
||||
describe("Invite button functionality", () => {
|
||||
@ -84,7 +84,9 @@ describe("MemberListHeaderView", () => {
|
||||
jest.spyOn(memberListRoom, "getMyMembership").mockReturnValue(KnownMembership.Join);
|
||||
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(false);
|
||||
await reRender();
|
||||
expect(screen.getByRole("button", { name: "Invite" })).toHaveAttribute("aria-disabled", "true");
|
||||
await waitFor(() =>
|
||||
expect(screen.getByRole("button", { name: "Invite" })).toHaveAttribute("aria-disabled", "true"),
|
||||
);
|
||||
});
|
||||
|
||||
it("Renders enabled invite button when current user is a member and has rights to invite", async () => {
|
||||
@ -92,7 +94,9 @@ describe("MemberListHeaderView", () => {
|
||||
jest.spyOn(memberListRoom, "getMyMembership").mockReturnValue(KnownMembership.Join);
|
||||
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(true);
|
||||
await reRender();
|
||||
expect(screen.getByRole("button", { name: "Invite" })).not.toHaveAttribute("aria-disabled", "true");
|
||||
await waitFor(() =>
|
||||
expect(screen.getByRole("button", { name: "Invite" })).not.toHaveAttribute("aria-disabled", "true"),
|
||||
);
|
||||
});
|
||||
|
||||
it("Opens room inviter on button click", async () => {
|
||||
@ -101,6 +105,7 @@ describe("MemberListHeaderView", () => {
|
||||
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(true);
|
||||
await reRender();
|
||||
|
||||
await waitFor(() => expect(screen.getByRole("button", { name: "Invite" })).not.toBeDisabled());
|
||||
fireEvent.click(screen.getByRole("button", { name: "Invite" }));
|
||||
expect(defaultDispatcher.dispatch).toHaveBeenCalledWith({
|
||||
action: "view_invite",
|
||||
|
||||
@ -191,20 +191,24 @@ describe("MemberListView and MemberlistHeaderView", () => {
|
||||
u.user!.presence = "offline";
|
||||
});
|
||||
|
||||
await act(reRender);
|
||||
await reRender();
|
||||
|
||||
const tiles = root.container.querySelectorAll(".mx_MemberTileView");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
await waitFor(() => {
|
||||
const tiles = root.container.querySelectorAll(".mx_MemberTileView");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
});
|
||||
});
|
||||
|
||||
it("by power level", async () => {
|
||||
const { reRender, root, memberListRoom } = rendered;
|
||||
// We already have admin, moderator, and default users so leave them alone
|
||||
|
||||
await act(reRender);
|
||||
await reRender();
|
||||
|
||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
await waitFor(() => {
|
||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
});
|
||||
});
|
||||
|
||||
it("by last active timestamp", async () => {
|
||||
@ -229,10 +233,12 @@ describe("MemberListView and MemberlistHeaderView", () => {
|
||||
u.user!.lastActiveAgo = 100;
|
||||
});
|
||||
|
||||
await act(reRender);
|
||||
await reRender();
|
||||
|
||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
await waitFor(() => {
|
||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
});
|
||||
});
|
||||
|
||||
it("by name", async () => {
|
||||
@ -247,10 +253,12 @@ describe("MemberListView and MemberlistHeaderView", () => {
|
||||
u.powerLevel = 100;
|
||||
});
|
||||
|
||||
await act(reRender);
|
||||
await reRender();
|
||||
|
||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
await waitFor(() => {
|
||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -163,6 +163,5 @@ function createReRenderFunction(client: MatrixClient, memberListRoom: Room): Ren
|
||||
getRoomId: () => memberListRoom.roomId,
|
||||
});
|
||||
});
|
||||
await new Promise((r) => setTimeout(r, 1000));
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user