fix: flaky ooo e2e test (#20649)
* split big date range filter test to smaller tests * add missing waitFor()
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user