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:
@@ -71,7 +71,7 @@ describe("MemberListHeaderView", () => {
|
|||||||
memberListRoom.currentState.members[newMember.userId] = newMember;
|
memberListRoom.currentState.members[newMember.userId] = newMember;
|
||||||
}
|
}
|
||||||
await reRender();
|
await reRender();
|
||||||
expect(screen.queryByPlaceholderText("Search room members")).toBeVisible();
|
await waitFor(() => expect(screen.queryByPlaceholderText("Search room members")).toBeVisible());
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Invite button functionality", () => {
|
describe("Invite button functionality", () => {
|
||||||
@@ -84,7 +84,9 @@ describe("MemberListHeaderView", () => {
|
|||||||
jest.spyOn(memberListRoom, "getMyMembership").mockReturnValue(KnownMembership.Join);
|
jest.spyOn(memberListRoom, "getMyMembership").mockReturnValue(KnownMembership.Join);
|
||||||
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(false);
|
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(false);
|
||||||
await reRender();
|
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 () => {
|
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, "getMyMembership").mockReturnValue(KnownMembership.Join);
|
||||||
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(true);
|
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(true);
|
||||||
await reRender();
|
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 () => {
|
it("Opens room inviter on button click", async () => {
|
||||||
@@ -101,6 +105,7 @@ describe("MemberListHeaderView", () => {
|
|||||||
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(true);
|
jest.spyOn(memberListRoom, "canInvite").mockReturnValue(true);
|
||||||
await reRender();
|
await reRender();
|
||||||
|
|
||||||
|
await waitFor(() => expect(screen.getByRole("button", { name: "Invite" })).not.toBeDisabled());
|
||||||
fireEvent.click(screen.getByRole("button", { name: "Invite" }));
|
fireEvent.click(screen.getByRole("button", { name: "Invite" }));
|
||||||
expect(defaultDispatcher.dispatch).toHaveBeenCalledWith({
|
expect(defaultDispatcher.dispatch).toHaveBeenCalledWith({
|
||||||
action: "view_invite",
|
action: "view_invite",
|
||||||
|
|||||||
@@ -191,20 +191,24 @@ describe("MemberListView and MemberlistHeaderView", () => {
|
|||||||
u.user!.presence = "offline";
|
u.user!.presence = "offline";
|
||||||
});
|
});
|
||||||
|
|
||||||
await act(reRender);
|
await reRender();
|
||||||
|
|
||||||
const tiles = root.container.querySelectorAll(".mx_MemberTileView");
|
await waitFor(() => {
|
||||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
const tiles = root.container.querySelectorAll(".mx_MemberTileView");
|
||||||
|
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("by power level", async () => {
|
it("by power level", async () => {
|
||||||
const { reRender, root, memberListRoom } = rendered;
|
const { reRender, root, memberListRoom } = rendered;
|
||||||
// We already have admin, moderator, and default users so leave them alone
|
// We already have admin, moderator, and default users so leave them alone
|
||||||
|
|
||||||
await act(reRender);
|
await reRender();
|
||||||
|
|
||||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
await waitFor(() => {
|
||||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||||
|
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("by last active timestamp", async () => {
|
it("by last active timestamp", async () => {
|
||||||
@@ -229,10 +233,12 @@ describe("MemberListView and MemberlistHeaderView", () => {
|
|||||||
u.user!.lastActiveAgo = 100;
|
u.user!.lastActiveAgo = 100;
|
||||||
});
|
});
|
||||||
|
|
||||||
await act(reRender);
|
await reRender();
|
||||||
|
|
||||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
await waitFor(() => {
|
||||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
||||||
|
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("by name", async () => {
|
it("by name", async () => {
|
||||||
@@ -247,10 +253,12 @@ describe("MemberListView and MemberlistHeaderView", () => {
|
|||||||
u.powerLevel = 100;
|
u.powerLevel = 100;
|
||||||
});
|
});
|
||||||
|
|
||||||
await act(reRender);
|
await reRender();
|
||||||
|
|
||||||
const tiles = root.container.querySelectorAll(".mx_EntityTile");
|
await waitFor(() => {
|
||||||
expectOrderedByPresenceAndPowerLevel(memberListRoom, tiles, enablePresence);
|
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,
|
getRoomId: () => memberListRoom.roomId,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
await new Promise((r) => setTimeout(r, 1000));
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user