Skip to content

Commit d7883bf

Browse files
committed
Fix flaky test team member ordering
1 parent 8959d5f commit d7883bf

2 files changed

Lines changed: 42 additions & 16 deletions

File tree

lib/db/queries.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@ import { and, desc, eq, isNull } from "drizzle-orm";
22
import { cookies } from "next/headers";
33
import { verifyToken } from "@/lib/auth/session";
44
import { db } from "./drizzle";
5-
import { activityLogs, teamMembers, teams, users } from "./schema";
5+
import {
6+
activityLogs,
7+
type TeamDataWithMembers,
8+
teamMembers,
9+
teams,
10+
users,
11+
} from "./schema";
612

713
export async function getUser() {
814
const sessionCookie = (await cookies()).get("session");
@@ -114,5 +120,26 @@ export async function getTeamForUser() {
114120
},
115121
});
116122

117-
return result?.team || null;
123+
if (!result?.team) {
124+
return null;
125+
}
126+
127+
return {
128+
...result.team,
129+
teamMembers: [...result.team.teamMembers].sort(compareTeamMembers),
130+
};
131+
}
132+
133+
function compareTeamMembers(
134+
a: TeamDataWithMembers["teamMembers"][number],
135+
b: TeamDataWithMembers["teamMembers"][number],
136+
) {
137+
const roleOrder = roleSortOrder(a.role) - roleSortOrder(b.role);
138+
if (roleOrder !== 0) return roleOrder;
139+
140+
return a.joinedAt.getTime() - b.joinedAt.getTime() || a.id - b.id;
141+
}
142+
143+
function roleSortOrder(role: string) {
144+
return role === "owner" ? 0 : 1;
118145
}

tests/team-invitation.spec.ts

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,21 +73,20 @@ test.describe("Team Invitation Flow", () => {
7373
).toBeVisible();
7474
await expect(page).toHaveURL("/dashboard");
7575

76-
const firstTeamMember = await page.getByTestId("team-member").first();
77-
expect(firstTeamMember.getByTestId("team-member-name")).toContainText(
78-
existingMemberName,
79-
);
80-
expect(firstTeamMember.getByTestId("team-member-role")).toContainText(
81-
"owner",
82-
);
76+
const teamMembers = page.getByTestId("team-member");
77+
await expect(teamMembers).toHaveCount(2);
8378

84-
const secondTeamMember = await page.getByTestId("team-member").nth(1);
85-
expect(secondTeamMember.getByTestId("team-member-name")).toContainText(
86-
newUserEmail,
87-
);
88-
expect(secondTeamMember.getByTestId("team-member-role")).toContainText(
89-
"member",
90-
);
79+
const existingMember = teamMembers.filter({
80+
hasText: existingMemberName,
81+
});
82+
await expect(
83+
existingMember.getByTestId("team-member-role"),
84+
).toContainText("owner");
85+
86+
const invitedMember = teamMembers.filter({ hasText: newUserEmail });
87+
await expect(
88+
invitedMember.getByTestId("team-member-role"),
89+
).toContainText("member");
9190
});
9291
},
9392
);

0 commit comments

Comments
 (0)