fix: flaky ooo e2e test (#20649)

* split big date range filter test to smaller tests

* add missing waitFor()
This commit is contained in:
Vijay
2025-04-10 21:10:37 +05:30
committed by GitHub
parent a77ee7aaa2
commit 1c365dee38
+95 -38
View File
@@ -686,10 +686,7 @@ test.describe("Out of office", () => {
await expect(page.locator('[data-testid="date-range-options-c"]')).toBeVisible(); //Custom
});
test("OOO records are fetched correctly w.r.t their end dates matching the date range filter selected.", async ({
page,
users,
}) => {
test("Default - No date range filter selected.", async ({ page, users }) => {
const member1Name = `member-1-${Date.now()}`;
const member2Name = `member-2-${Date.now()}`;
const member3Name = `member-3-${Date.now()}`;
@@ -721,22 +718,39 @@ test.describe("Out of office", () => {
},
});
//create OOO for member3, start:currentDate-12Days, end:currentDate-10days (for Last 30 Days)
await prisma.outOfOfficeEntry.create({
data: {
start: dayjs().startOf("day").subtract(12, "days").toDate(),
end: dayjs().startOf("day").subtract(10, "days").toDate(),
uuid: uuidv4(),
user: { connect: { id: member3User?.id } },
toUser: { connect: { id: member1User?.id } },
createdAt: new Date(),
reason: {
connect: {
id: 2,
},
},
},
});
await member3User?.apiLogin();
const entriesListRespPromise = page.waitForResponse(
(response) => response.url().includes("outOfOfficeEntriesList") && response.status() === 200
);
await page.goto("/settings/my-account/out-of-office");
await entriesListRespPromise;
await page.waitForLoadState("domcontentloaded");
//By Default future OOO will be displayed
//1 OOO record should be visible for member3, end=currentDate+4days
const oooEntries = page.locator('[data-testid="ooo-actions"]');
await oooEntries.waitFor({ state: "visible" });
const oooEntriesCount = await oooEntries.count();
expect(oooEntriesCount).toBe(1);
await expect(page.locator(`data-testid=table-redirect-n-a`).nth(0)).toBeVisible();
});
test("Date range filter selected - 'Last 7 Days' (default filter).", async ({ page, users }) => {
const member1Name = `member-1-${Date.now()}`;
const member2Name = `member-2-${Date.now()}`;
const member3Name = `member-3-${Date.now()}`;
const teamMatesObj = [{ name: member1Name }, { name: member2Name }];
const member3User = await users.create(
{ name: member3Name },
{
hasTeam: true,
teamRole: MembershipRole.MEMBER,
teammates: teamMatesObj,
}
);
const member1User = users.get().find((user) => user.name === member1Name);
const member2User = users.get().find((user) => user.name === member2Name);
//create OOO for member3, start:currentDate-2Days, end:currentDate-4days (for Last 7 Days)
await prisma.outOfOfficeEntry.create({
@@ -763,14 +777,6 @@ test.describe("Out of office", () => {
await entriesListRespPromise;
await page.waitForLoadState("domcontentloaded");
//By Default future OOO will be displayed
//1 OOO record should be visible for member3, end=currentDate+4days
const oooEntries = page.locator('[data-testid="ooo-actions"]');
const oooEntriesCount = await oooEntries.count();
expect(oooEntriesCount).toBe(1);
await expect(page.locator(`data-testid=table-redirect-n-a`).nth(0)).toBeVisible();
//Default filter 'Last 7 Days' when DateRange Filter is selected
await test.step("Default filter - 'Last 7 Days'", async () => {
await page.locator('[data-testid="add-filter-button"]').click();
@@ -781,29 +787,80 @@ test.describe("Out of office", () => {
await entriesListRespPromise;
//1 OOO record should be visible for member3, end=currentDate-4days
expect(await page.locator('[data-testid^="table-redirect-"]').count()).toBe(1);
const oooEntries = page.locator('[data-testid="ooo-actions"]');
await oooEntries.waitFor({ state: "visible" });
const oooEntriesCount = await oooEntries.count();
expect(oooEntriesCount).toBe(1);
await expect(
page.locator(`data-testid=table-redirect-${member2User?.username}`).nth(0)
).toBeVisible();
});
});
test("Date range filter selected - 'Last 30 Days'.", async ({ page, users }) => {
const member1Name = `member-1-${Date.now()}`;
const member2Name = `member-2-${Date.now()}`;
const member3Name = `member-3-${Date.now()}`;
const teamMatesObj = [{ name: member1Name }, { name: member2Name }];
const member3User = await users.create(
{ name: member3Name },
{
hasTeam: true,
teamRole: MembershipRole.MEMBER,
teammates: teamMatesObj,
}
);
const member1User = users.get().find((user) => user.name === member1Name);
const member2User = users.get().find((user) => user.name === member2Name);
//create OOO for member3, start:currentDate-12Days, end:currentDate-10days (for Last 30 Days)
await prisma.outOfOfficeEntry.create({
data: {
start: dayjs().startOf("day").subtract(12, "days").toDate(),
end: dayjs().startOf("day").subtract(10, "days").toDate(),
uuid: uuidv4(),
user: { connect: { id: member3User?.id } },
toUser: { connect: { id: member1User?.id } },
createdAt: new Date(),
reason: {
connect: {
id: 2,
},
},
},
});
await member3User?.apiLogin();
const entriesListRespPromise = page.waitForResponse(
(response) => response.url().includes("outOfOfficeEntriesList") && response.status() === 200
);
await page.goto("/settings/my-account/out-of-office");
await entriesListRespPromise;
await page.waitForLoadState("domcontentloaded");
//Select 'Last 30 Days'
await test.step("select 'Last 30 Days'", async () => {
await page.locator('[data-testid="filter-popover-trigger-dateRange"]').click();
const entriesListRespPromise = page.waitForResponse(
await page.locator('[data-testid="add-filter-button"]').click();
const entriesListRespPromise1 = page.waitForResponse(
(response) => response.url().includes("outOfOfficeEntriesList") && response.status() === 200
);
await page.locator(`[data-testid="date-range-options-t"]`).click();
await entriesListRespPromise;
await page.locator('[data-testid="add-filter-item-dateRange"]').click();
await entriesListRespPromise1;
//2 OOO records should be visible end=currentDate-4days, end=currentDate-12days
await page.locator('[data-testid="filter-popover-trigger-dateRange"]').click();
const entriesListRespPromise2 = page.waitForResponse(
(response) => response.url().includes("outOfOfficeEntriesList") && response.status() === 200
);
await page.locator(`[data-testid="date-range-options-t"]`).click(); //Last 30 Days
await entriesListRespPromise2;
//1 OOO record should be visible end=currentDate-12days
const oooEntries = page.locator('[data-testid="ooo-actions"]');
await oooEntries.waitFor({ state: "visible" });
const oooEntriesCount = await oooEntries.count();
expect(oooEntriesCount).toBe(2);
await expect(
page.locator(`data-testid=table-redirect-${member2User?.username}`).nth(0)
).toBeVisible();
expect(oooEntriesCount).toBe(1);
await expect(
page.locator(`data-testid=table-redirect-${member1User?.username}`).nth(0)
).toBeVisible();