diff --git a/apps/web/playwright/availability.e2e.ts b/apps/web/playwright/availability.e2e.ts index 479b496c80..1d2b504e93 100644 --- a/apps/web/playwright/availability.e2e.ts +++ b/apps/web/playwright/availability.e2e.ts @@ -39,7 +39,6 @@ test.describe("Availablity", () => { const nextMonth = dayjs().add(1, "month").startOf("month"); const troubleshooterURL = `/availability/troubleshoot?date=${nextMonth.format("YYYY-MM-DD")}`; await page.goto(troubleshooterURL); - // await page.waitForLoadState("networkidle"); await expect(page.locator('[data-testid="troubleshooter-busy-time"]')).toHaveCount(1); }); diff --git a/apps/web/playwright/booking-limits.e2e.ts b/apps/web/playwright/booking-limits.e2e.ts index f5a49ea324..272a257c60 100644 --- a/apps/web/playwright/booking-limits.e2e.ts +++ b/apps/web/playwright/booking-limits.e2e.ts @@ -165,7 +165,6 @@ test.describe("Booking limits", () => { await page.locator('[data-testid="confirm-reschedule-button"]').click(); - // await page.waitForLoadState("networkidle"); await expect(page.locator("[data-testid=success-page]")).toBeVisible(); const newBooking = await prisma.booking.findFirstOrThrow({ where: { fromReschedule: bookingId } }); diff --git a/apps/web/playwright/booking-pages.e2e.ts b/apps/web/playwright/booking-pages.e2e.ts index 388933e3e3..d883f87327 100644 --- a/apps/web/playwright/booking-pages.e2e.ts +++ b/apps/web/playwright/booking-pages.e2e.ts @@ -28,15 +28,12 @@ test("check SSR and OG - User Event Type", async ({ page, users }) => { const user = await users.create({ name, }); - const [response] = await Promise.all([ - // This promise resolves to the main resource response - page.waitForResponse( - (response) => response.url().includes(`/${user.username}/30-min`) && response.status() === 200 - ), - - // Trigger the page navigation - page.goto(`/${user.username}/30-min`), - ]); + const responsePromise = page.waitForResponse( + (response) => response.url().includes(`/${user.username}/30-min`) && response.status() === 200 + ); + await page.goto(`/${user.username}/30-min`); + await page.content(); + const response = await responsePromise; const ssrResponse = await response.text(); const document = new JSDOM(ssrResponse).window.document; @@ -300,10 +297,8 @@ testBothFutureAndLegacyRoutes.describe("pro user", () => { await eventTypeLink.waitFor(); await eventTypeLink.click(); - // await pageTwo.waitForLoadState("networkidle"); await pageTwo.locator('[data-testid="incrementMonth"]').waitFor(); await pageTwo.click('[data-testid="incrementMonth"]'); - // await pageTwo.waitForLoadState("networkidle"); await pageTwo.locator('[data-testid="day"][data-disabled="false"]').nth(0).waitFor(); await pageTwo.locator('[data-testid="day"][data-disabled="false"]').nth(0).click(); @@ -337,10 +332,8 @@ testBothFutureAndLegacyRoutes.describe("pro user", () => { await page.locator('[data-testid="back"]').waitFor(); await page.click('[data-testid="back"]'); - // await pageTwo.waitForLoadState("networkidle"); await pageTwo.locator('[data-testid="incrementMonth"]').waitFor(); await pageTwo.click('[data-testid="incrementMonth"]'); - // await pageTwo.waitForLoadState("networkidle"); await pageTwo.locator('[data-testid="day"][data-disabled="false"]').nth(0).waitFor(); await pageTwo.locator('[data-testid="day"][data-disabled="false"]').nth(0).click(); @@ -509,8 +502,6 @@ testBothFutureAndLegacyRoutes.describe("Booking round robin event", () => { // books 9AM slots for 120 minutes (test-user is not available at this time, availability starts at 10) await page.locator('[data-testid="time"]').nth(0).click(); - // await page.waitForLoadState("networkidle"); - await page.locator('[name="name"]').fill("Test name"); await page.locator('[name="email"]').fill(`${randomString(4)}@example.com`); @@ -541,8 +532,6 @@ testBothFutureAndLegacyRoutes.describe("Booking round robin event", () => { // Again book a 9AM slot for 120 minutes where test-user is not available await page.locator('[data-testid="time"]').nth(0).click(); - // await page.waitForLoadState("networkidle"); - await page.locator('[name="name"]').fill("Test name"); await page.locator('[name="email"]').fill(`${randomString(4)}@example.com`); diff --git a/apps/web/playwright/booking-seats.e2e.ts b/apps/web/playwright/booking-seats.e2e.ts index 33b20677b5..f07474af3b 100644 --- a/apps/web/playwright/booking-seats.e2e.ts +++ b/apps/web/playwright/booking-seats.e2e.ts @@ -104,7 +104,6 @@ test.describe("Booking with Seats", () => { // confirm cancellation await page.locator('[data-testid="confirm_cancel"]').click(); - // await page.waitForLoadState("networkidle"); await expect(page.locator("text=This event is canceled")).toBeVisible(); @@ -229,8 +228,6 @@ test.describe("Reschedule for booking with seats", () => { await page.locator('[data-testid="confirm_cancel"]').click(); - // await page.waitForLoadState("networkidle"); - await expect(page.locator("text=You are no longer attending this event")).toBeVisible(); await page.goto( @@ -240,8 +237,6 @@ test.describe("Reschedule for booking with seats", () => { // Page should not be 404 await page.locator('[data-testid="confirm_cancel"]').click(); - // await page.waitForLoadState("networkidle"); - await expect(page.locator("text=You are no longer attending this event")).toBeVisible(); }); @@ -408,8 +403,6 @@ test.describe("Reschedule for booking with seats", () => { await expect(page).toHaveURL(/\/booking\/.*/); - // await page.waitForLoadState("networkidle"); - const updatedBooking = await prisma.booking.findFirst({ where: { id: booking.id }, }); diff --git a/apps/web/playwright/change-password.e2e.ts b/apps/web/playwright/change-password.e2e.ts index 541af5bf23..bfb3ad75f9 100644 --- a/apps/web/playwright/change-password.e2e.ts +++ b/apps/web/playwright/change-password.e2e.ts @@ -13,8 +13,6 @@ test.describe("Change Password Test", () => { expect(pro.username).toBeTruthy(); - // await page.waitForLoadState("networkidle"); - // Fill form await page.locator('[name="oldPassword"]').fill(String(pro.username)); diff --git a/apps/web/playwright/change-theme.e2e.ts b/apps/web/playwright/change-theme.e2e.ts index e7d2159644..186221ff3e 100644 --- a/apps/web/playwright/change-theme.e2e.ts +++ b/apps/web/playwright/change-theme.e2e.ts @@ -9,7 +9,6 @@ test.describe("Change Theme Test", () => { await page.goto("/settings/my-account/appearance"); - // await page.waitForLoadState("networkidle"); //Click the "Dark" theme label await page.click('[data-testid="theme-dark"]'); //Click the update button @@ -29,7 +28,6 @@ test.describe("Change Theme Test", () => { await page.goto("/settings/my-account/appearance"); - // await page.waitForLoadState("networkidle"); //Click the "Light" theme label await page.click('[data-testid="theme-light"]'); //Click the update theme button diff --git a/apps/web/playwright/change-username.e2e.ts b/apps/web/playwright/change-username.e2e.ts index 3892c72cbc..6c15fb42dd 100644 --- a/apps/web/playwright/change-username.e2e.ts +++ b/apps/web/playwright/change-username.e2e.ts @@ -60,7 +60,6 @@ test.describe("Change username on settings", () => { page.click("[data-testid=save-username]"), page.getByTestId("toast-success").waitFor(), ]); - // await page.waitForLoadState("networkidle"); const updatedUser = await prisma.user.findUniqueOrThrow({ where: { @@ -149,7 +148,6 @@ test.describe("Change username on settings", () => { const usernameInput = page.locator("[data-testid=username-input]"); await usernameInput.fill(previousUsername); - // await page.waitForLoadState("networkidle"); await expect(page.locator("[data-testid=update-username-btn]").nth(0)).toBeHidden(); await expect(page.locator("[data-testid=update-username-btn]").nth(1)).toBeHidden(); }); diff --git a/apps/web/playwright/dynamic-booking-pages.e2e.ts b/apps/web/playwright/dynamic-booking-pages.e2e.ts index dfc969220a..bc0f9d8d39 100644 --- a/apps/web/playwright/dynamic-booking-pages.e2e.ts +++ b/apps/web/playwright/dynamic-booking-pages.e2e.ts @@ -70,8 +70,6 @@ test("dynamic booking info prefilled by query params", async ({ page, users }) = const free = await users.create({ username: "free.example" }); await page.goto(`/${pro.username}+${free.username}?duration=${duration}`); - // await page.waitForLoadState("networkidle"); - const listItemByDurationTestId = (duration: number) => `multiple-choice-${duration}mins`; let listItemLocator = await page.getByTestId(listItemByDurationTestId(duration)); diff --git a/apps/web/playwright/event-types.e2e.ts b/apps/web/playwright/event-types.e2e.ts index 778970ea63..1fe8d5592b 100644 --- a/apps/web/playwright/event-types.e2e.ts +++ b/apps/web/playwright/event-types.e2e.ts @@ -64,7 +64,6 @@ testBothFutureAndLegacyRoutes.describe("Event Types tests", () => { const nonce = randomString(3); const eventTitle = `my recurring event ${nonce}`; await createNewEventType(page, { eventTitle }); - // await page.waitForLoadState("networkidle"); await page.click("[data-testid=vertical-tab-recurring]"); await expect(page.locator("[data-testid=recurring-event-collapsible]")).toBeHidden(); @@ -270,14 +269,12 @@ testBothFutureAndLegacyRoutes.describe("Event Types tests", () => { await addAnotherLocation(page, "Cal Video (Global)"); await saveEventType(page); - // await page.waitForLoadState("networkidle"); // Remove Attendee Phone Number Location const removeButtomId = "delete-locations.0.type"; await page.getByTestId(removeButtomId).click(); await saveEventType(page); - // await page.waitForLoadState("networkidle"); await gotoBookingPage(page); await selectFirstAvailableTimeSlotNextMonth(page); diff --git a/apps/web/playwright/fixtures/apps.ts b/apps/web/playwright/fixtures/apps.ts index d86fe1a3a7..3fa61be3f7 100644 --- a/apps/web/playwright/fixtures/apps.ts +++ b/apps/web/playwright/fixtures/apps.ts @@ -62,11 +62,9 @@ export function createAppsFixture(page: Page) { } await page.locator("[data-testid=display-location]").last().check(); await saveEventType(page); - // await page.waitForLoadState("networkidle"); await gotoBookingPage(page); await selectFirstAvailableTimeSlotNextMonth(page); await bookTimeSlot(page); - // await page.waitForLoadState("networkidle"); await expect(page.locator("[data-testid=success-page]")).toBeVisible(); await expect(page.locator("[data-testid=where] ")).toContainText(app.label); @@ -94,11 +92,9 @@ export function createAppsFixture(page: Page) { verifyConferencingAppNew: async (app: TApp, eventTypeIds: number[]) => { for (const id of eventTypeIds) { await page.goto(`/event-types/${id}`); - // await page.waitForLoadState("networkidle"); await gotoBookingPage(page); await selectFirstAvailableTimeSlotNextMonth(page); await bookTimeSlot(page, { name: `Test Testson`, email: `test@example.com` }); - // await page.waitForLoadState("networkidle"); await expect(page.locator("[data-testid=success-page]")).toBeVisible(); await expect(page.locator("[data-testid=where] ")).toContainText(app.label); } diff --git a/apps/web/playwright/hash-my-url.e2e.ts b/apps/web/playwright/hash-my-url.e2e.ts index d84e439522..f6fbb0cefe 100644 --- a/apps/web/playwright/hash-my-url.e2e.ts +++ b/apps/web/playwright/hash-my-url.e2e.ts @@ -32,8 +32,6 @@ test.describe("hash my url", () => { // click update await page.locator('[data-testid="update-eventtype"]').press("Enter"); - // await page.waitForLoadState("networkidle"); - // book using generated url hash await page.goto($url); await selectFirstAvailableTimeSlotNextMonth(page); @@ -61,7 +59,6 @@ test.describe("hash my url", () => { await page.locator("[data-testid=update-eventtype]").click(); const response = await submitPromise; expect(response.status()).toBe(200); - // await page.waitForLoadState("networkidle"); await page.locator(".primary-navigation >> text=Advanced").click(); const $url2 = await page.locator('//*[@data-testid="generated-hash-url"]').inputValue(); expect($url2.includes("somethingrandom")).toBeTruthy(); diff --git a/apps/web/playwright/impersonation.e2e.ts b/apps/web/playwright/impersonation.e2e.ts index 9e917d2a75..15c74fe9de 100644 --- a/apps/web/playwright/impersonation.e2e.ts +++ b/apps/web/playwright/impersonation.e2e.ts @@ -41,7 +41,6 @@ test.describe("Users can impersonate", async () => { await stopImpersonatingButton.click(); await expect(stopImpersonatingButton).toBeHidden(); - // await page.waitForLoadState("networkidle"); // Return to user const ogUser = await impersonatedUsernameInput.inputValue(); diff --git a/apps/web/playwright/insights.e2e.ts b/apps/web/playwright/insights.e2e.ts index 8ec67f4176..8085db2025 100644 --- a/apps/web/playwright/insights.e2e.ts +++ b/apps/web/playwright/insights.e2e.ts @@ -110,8 +110,6 @@ test.describe("Insights", async () => { // go to insights page await page.goto("/insights"); - // await page.waitForLoadState("networkidle"); - // get div from team select filter with this class flex flex-col gap-0.5 [&>*:first-child]:mt-1 [&>*:last-child]:mb-1 await page.getByTestId("dashboard-shell").getByText("Team: test-insights").click(); await page @@ -134,7 +132,6 @@ test.describe("Insights", async () => { await owner.apiLogin(); await page.goto("/insights"); - // await page.waitForLoadState("networkidle"); await page.getByTestId("dashboard-shell").getByText("All").nth(1).click(); @@ -220,7 +217,6 @@ test.describe("Insights", async () => { ) .nth(0) .click(); - // await page.waitForLoadState("networkidle"); await page .locator( @@ -228,7 +224,6 @@ test.describe("Insights", async () => { ) .nth(1) .click(); - // await page.waitForLoadState("networkidle"); // press escape button to close the filter await page.keyboard.press("Escape"); @@ -247,7 +242,6 @@ test.describe("Insights", async () => { await owner.apiLogin(); await page.goto("/insights"); - // await page.waitForLoadState("networkidle"); const downloadPromise = page.waitForEvent("download"); diff --git a/apps/web/playwright/lib/testUtils.ts b/apps/web/playwright/lib/testUtils.ts index f474b4584d..dfbd98712f 100644 --- a/apps/web/playwright/lib/testUtils.ts +++ b/apps/web/playwright/lib/testUtils.ts @@ -207,7 +207,7 @@ export async function gotoRoutingLink({ await page.goto(`${previewLink}${queryString ? `?${queryString}` : ""}`); // HACK: There seems to be some issue with the inputs to the form getting reset if we don't wait. - await new Promise((resolve) => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 2000)); } export async function installAppleCalendar(page: Page) { diff --git a/apps/web/playwright/oauth-provider.e2e.ts b/apps/web/playwright/oauth-provider.e2e.ts index 3b4626518a..5955ade09a 100644 --- a/apps/web/playwright/oauth-provider.e2e.ts +++ b/apps/web/playwright/oauth-provider.e2e.ts @@ -31,8 +31,6 @@ test.describe("OAuth Provider", () => { await page.goto( `auth/oauth2/authorize?client_id=${client.clientId}&redirect_uri=${client.redirectUri}&response_type=code&scope=READ_PROFILE&state=1234` ); - - // await page.waitForLoadState("networkidle"); await page.getByTestId("allow-button").click(); await page.waitForFunction(() => { @@ -112,8 +110,6 @@ test.describe("OAuth Provider", () => { `auth/oauth2/authorize?client_id=${client.clientId}&redirect_uri=${client.redirectUri}&response_type=code&scope=READ_PROFILE&state=1234` ); - // await page.waitForLoadState("networkidle"); - await page.locator("#account-select").click(); await page.locator("#react-select-2-option-1").click(); diff --git a/apps/web/playwright/organization/across-org/across-org.e2e.ts b/apps/web/playwright/organization/across-org/across-org.e2e.ts index 77ad84dbc6..ae091b288a 100644 --- a/apps/web/playwright/organization/across-org/across-org.e2e.ts +++ b/apps/web/playwright/organization/across-org/across-org.e2e.ts @@ -47,7 +47,6 @@ test.describe("user1NotMemberOfOrg1 is part of team1MemberOfOrg1", () => { await user1NotMemberOfOrg1.apiLogin(); await page.goto("/event-types"); - // await page.waitForLoadState("networkidle"); const userEventLinksSelector = `[data-testid=slug-${user1NotMemberOfOrg1.username}] [data-testid="preview-link-button"]`; await page.waitForSelector(userEventLinksSelector); diff --git a/apps/web/playwright/organization/booking.e2e.ts b/apps/web/playwright/organization/booking.e2e.ts index 684cccfc0a..a4dca7a6f9 100644 --- a/apps/web/playwright/organization/booking.e2e.ts +++ b/apps/web/playwright/organization/booking.e2e.ts @@ -163,6 +163,7 @@ test.describe("Bookings", () => { const { team } = await owner.getFirstTeamMembership(); const teamEvent = await owner.getFirstTeamEvent(team.id); + const eventHostsObj = [...teamMatesObj, { name: "pro-user" }]; await expectPageToBeNotFound({ page, url: `/team/${team.slug}/${teamEvent.slug}` }); @@ -172,7 +173,7 @@ test.describe("Bookings", () => { page, }, async () => { - await bookTeamEvent({ page, team, event: teamEvent, teamMatesObj }); + await bookTeamEvent({ page, team, event: teamEvent, teamMatesObj: eventHostsObj }); // Since all the users have the same leastRecentlyBooked value // Anyone of the teammates could be the Host of the booking. @@ -542,6 +543,7 @@ test.describe("Bookings", () => { await expectPageToBeNotFound({ page, url: `/${usernameInOrg}` }); await userOutsideOrganization.apiLogin(); await acceptTeamOrOrgInvite(page); + await userOutsideOrganization.logout(); await test.step("Book through new link", async () => { await doOnOrgDomain( { diff --git a/apps/web/playwright/organization/lib/inviteUser.ts b/apps/web/playwright/organization/lib/inviteUser.ts index bd18615a2f..b1776ae69e 100644 --- a/apps/web/playwright/organization/lib/inviteUser.ts +++ b/apps/web/playwright/organization/lib/inviteUser.ts @@ -13,7 +13,6 @@ export const inviteUserToOrganization = async ({ usersFixture: ReturnType; }) => { await page.goto("/settings/organizations/members"); - // await page.waitForLoadState("networkidle"); const invitedUserEmail = usersFixture.trackEmail({ username: email.split("@")[0], domain: email.split("@")[1], @@ -36,7 +35,6 @@ export const inviteExistingUserToOrganization = async ({ usersFixture: ReturnType; }) => { await page.goto("/settings/organizations/members"); - // await page.waitForLoadState("networkidle"); await inviteAnEmail(page, user.email); await page.waitForSelector('[data-testid="toast-success"]'); @@ -46,12 +44,10 @@ export const inviteExistingUserToOrganization = async ({ export async function acceptTeamOrOrgInvite(page: Page) { await page.goto("/settings/teams"); await page.click('[data-testid^="accept-invitation"]'); - // await page.waitForLoadState("networkidle"); } async function inviteAnEmail(page: Page, invitedUserEmail: string) { await page.locator('button:text("Add")').click(); await page.locator('input[name="inviteUser"]').fill(invitedUserEmail); await page.locator('button:text("Send invite")').click(); - // await page.waitForLoadState("networkidle"); } diff --git a/apps/web/playwright/organization/organization-creation.e2e.ts b/apps/web/playwright/organization/organization-creation.e2e.ts index 5665ec90fc..6a4ba312ed 100644 --- a/apps/web/playwright/organization/organization-creation.e2e.ts +++ b/apps/web/playwright/organization/organization-creation.e2e.ts @@ -131,7 +131,6 @@ test.describe("Organization", () => { const orgName = capitalize(`${orgOwnerUser.username}`); const orgSlug = `myOrg-${uuid()}`.toLowerCase(); await page.goto("/settings/organizations/new"); - // await page.waitForLoadState("networkidle"); await test.step("Basic info", async () => { // Check required fields @@ -192,7 +191,6 @@ test.describe("Organization", () => { await expect(page.getByTestId("pending-member-item")).toHaveCount(2); const lastRemoveMemberButton = page.getByTestId("remove-member-button").last(); await lastRemoveMemberButton.click(); - // await page.waitForLoadState("networkidle"); await expect(page.getByTestId("pending-member-item")).toHaveCount(1); await page.getByTestId("publish-button").click(); // Waiting to be in next step URL @@ -232,7 +230,6 @@ test.describe("Organization", () => { expect(url).toContain(expectedUrl); await fillStripeTestCheckout(page); - // await page.waitForLoadState("networkidle"); const upgradeButtonHidden = await page.getByTestId("upgrade_org_banner_button"); @@ -268,7 +265,6 @@ test.describe("Organization", () => { }); await page.goto("/settings/organizations/new"); - // await page.waitForLoadState("networkidle"); await test.step("Basic info", async () => { // Check required fields @@ -309,7 +305,6 @@ test.describe("Organization", () => { await orgOwnerUser.apiLogin(); const orgName = capitalize(`${orgOwnerUsername}`); await page.goto("/settings/organizations/new"); - // await page.waitForLoadState("networkidle"); await test.step("Basic info", async () => { // These values are infered due to an existing user being signed @@ -320,7 +315,6 @@ test.describe("Organization", () => { await page.locator("input[name=slug]").fill(orgOwnerUsername); await page.locator("button[type=submit]").click(); - // await page.waitForLoadState("networkidle"); }); await test.step("About the organization", async () => { @@ -364,7 +358,6 @@ test.describe("Organization", () => { await expect(page.getByTestId("pending-member-item")).toHaveCount(2); const lastRemoveMemberButton = page.getByTestId("remove-member-button").last(); await lastRemoveMemberButton.click(); - // await page.waitForLoadState("networkidle"); await expect(page.getByTestId("pending-member-item")).toHaveCount(1); await page.getByTestId("publish-button").click(); // Waiting to be in next step URL @@ -402,7 +395,6 @@ test.describe("Organization", () => { expect(url).toContain(expectedUrl); await fillStripeTestCheckout(page); - // await page.waitForLoadState("networkidle"); const upgradeButtonHidden = await page.getByTestId("upgrade_org_banner_button"); @@ -455,7 +447,6 @@ test.describe("Organization", () => { await slugLocator.fill(`example-${stringUUID}`); await page.locator("button[type=submit]").click(); - // await page.waitForLoadState("networkidle"); }); await test.step("About the organization", async () => { @@ -499,7 +490,6 @@ test.describe("Organization", () => { await expect(page.getByTestId("pending-member-item")).toHaveCount(2); const lastRemoveMemberButton = page.getByTestId("remove-member-button").last(); await lastRemoveMemberButton.click(); - // await page.waitForLoadState("networkidle"); await expect(page.getByTestId("pending-member-item")).toHaveCount(1); await page.getByTestId("publish-button").click(); // Waiting to be in next step URL @@ -547,7 +537,6 @@ test.describe("Organization", () => { expect(url).toContain(expectedUrl); await fillStripeTestCheckout(page); - // await page.waitForLoadState("networkidle"); const upgradeButtonHidden = await page.getByTestId("upgrade_org_banner_button"); @@ -557,7 +546,6 @@ test.describe("Organization", () => { await test.step("Ensure correctnumberOfTeams are migrated", async () => { // eslint-disable-next-line playwright/no-skipped-test await page.goto("/teams"); - // await page.waitForLoadState("networkidle"); const teamListItems = await page.getByTestId("team-list-item-link").all(); // Number of teams migrated + the two created in the create teams step diff --git a/apps/web/playwright/organization/organization-invitation.e2e.ts b/apps/web/playwright/organization/organization-invitation.e2e.ts index 0558c40a6a..1755e2697e 100644 --- a/apps/web/playwright/organization/organization-invitation.e2e.ts +++ b/apps/web/playwright/organization/organization-invitation.e2e.ts @@ -24,7 +24,6 @@ test.describe("Organization", () => { const { team: org } = await orgOwner.getOrgMembership(); await orgOwner.apiLogin(); await page.goto("/settings/organizations/members"); - // await page.waitForLoadState("networkidle"); await test.step("By email", async () => { const invitedUserEmail = users.trackEmail({ username: "rick", domain: "domain.com" }); @@ -104,7 +103,6 @@ test.describe("Organization", () => { await test.step("By email", async () => { await page.goto(`/settings/teams/${team.id}/members`); - // await page.waitForLoadState("networkidle"); const invitedUserEmail = users.trackEmail({ username: "rick", domain: "domain.com" }); // '-domain' because the email doesn't match orgAutoAcceptEmail const usernameDerivedFromEmail = `${invitedUserEmail.split("@")[0]}-domain`; @@ -126,7 +124,6 @@ test.describe("Organization", () => { email: invitedUserEmail, }); - // await page.waitForLoadState("networkidle"); const inviteLink = await expectInvitationEmailToBeReceived( page, emails, @@ -206,7 +203,6 @@ test.describe("Organization", () => { const { team: org } = await orgOwner.getOrgMembership(); await orgOwner.apiLogin(); await page.goto("/settings/organizations/members"); - // await page.waitForLoadState("networkidle"); await test.step("By email", async () => { const invitedUserEmail = users.trackEmail({ username: "rick", domain: "example.com" }); @@ -300,16 +296,14 @@ test.describe("Organization", () => { await test.step("Signing up with the previous username of the migrated user - shouldn't be allowed", async () => { await page.goto("/signup"); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + await expect(page.locator("text=Create your account")).toBeVisible(); const usernameInput = page.locator('input[name="username"]'); - await usernameInput.waitFor({ state: "attached" }); - await usernameInput.waitFor({ state: "visible" }); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion await usernameInput.fill(existingUser.username!); await page .locator('input[name="email"]') .fill(`${existingUser.username}-differnet-email@example.com`); await page.locator('input[name="password"]').fill("Password99!"); - // await page.waitForLoadState("networkidle"); await expect(page.locator('button[type="submit"]')).toBeDisabled(); }); }); @@ -334,7 +328,6 @@ test.describe("Organization", () => { await test.step("By email", async () => { await page.goto(`/settings/teams/${team.id}/members`); - // await page.waitForLoadState("networkidle"); const invitedUserEmail = users.trackEmail({ username: "rick", domain: "example.com" }); const usernameDerivedFromEmail = invitedUserEmail.split("@")[0]; await inviteAnEmail(page, invitedUserEmail); @@ -489,7 +482,6 @@ export async function signupFromEmailInviteLink({ async function inviteAnEmail(page: Page, invitedUserEmail: string) { await page.locator('button:text("Add")').click(); await page.locator('input[name="inviteUser"]').fill(invitedUserEmail); - // await page.waitForLoadState("networkidle"); const submitPromise = page.waitForResponse("/api/trpc/teams/inviteMember?batch=1"); await page.locator('button:text("Send invite")').click(); const response = await submitPromise; diff --git a/apps/web/playwright/organization/team-management.e2e.ts b/apps/web/playwright/organization/team-management.e2e.ts index fb9c24fc6e..05541680d0 100644 --- a/apps/web/playwright/organization/team-management.e2e.ts +++ b/apps/web/playwright/organization/team-management.e2e.ts @@ -57,7 +57,6 @@ test.describe("Teams", () => { await expect(page.getByTestId("pending-member-item")).toHaveCount(2); const lastRemoveMemberButton = page.getByTestId("remove-member-button").last(); await lastRemoveMemberButton.click(); - // await page.waitForLoadState("networkidle"); await expect(page.getByTestId("pending-member-item")).toHaveCount(1); // Cleanup here since this user is created without our fixtures. diff --git a/apps/web/playwright/overlay-calendar.e2e.ts b/apps/web/playwright/overlay-calendar.e2e.ts index 3494ffc4f0..38be873956 100644 --- a/apps/web/playwright/overlay-calendar.e2e.ts +++ b/apps/web/playwright/overlay-calendar.e2e.ts @@ -31,7 +31,6 @@ export {}; // await test.step("Settings should so no calendars connected", async () => { // const settingsCog = page.locator(`[data-testid=overlay-calendar-settings-button]`); // await settingsCog.click(); -// // await page.waitForLoadState("networkidle"); // const emptyScreenLocator = page.locator(`[data-testid=empty-screen]`); // await expect(emptyScreenLocator).toBeVisible(); // }); diff --git a/apps/web/playwright/payment.e2e.ts b/apps/web/playwright/payment.e2e.ts index bd1a98b830..1041567f79 100644 --- a/apps/web/playwright/payment.e2e.ts +++ b/apps/web/playwright/payment.e2e.ts @@ -43,8 +43,6 @@ testBothFutureAndLegacyRoutes.describe("Payment", (routeVariant) => { await page.goto(`${user.username}/30-min`); - // await page.waitForLoadState("networkidle"); - await selectFirstAvailableTimeSlotNextMonth(page); await bookTimeSlot(page); await page.waitForURL((url) => url.pathname.includes("/payment/")); diff --git a/apps/web/playwright/profile.e2e.ts b/apps/web/playwright/profile.e2e.ts index 17289291d7..5b8c8f318e 100644 --- a/apps/web/playwright/profile.e2e.ts +++ b/apps/web/playwright/profile.e2e.ts @@ -198,7 +198,6 @@ test.describe("Update Profile", () => { secondaryEmail: string; }) => { await test.step("the user receives the correct invitation link", async () => { - // await page.waitForLoadState("networkidle"); const verificationToken = await prisma.verificationToken.findFirst({ where: { identifier: secondaryEmail, @@ -248,7 +247,6 @@ test.describe("Update Profile", () => { expect(await secondaryEmailConfirmDialog.isVisible()).toBe(false); await test.step("the user receives the correct invitation link", async () => { - // await page.waitForLoadState("networkidle"); const verificationToken = await prisma.verificationToken.findFirst({ where: { identifier: secondaryEmail, diff --git a/apps/web/playwright/reschedule.e2e.ts b/apps/web/playwright/reschedule.e2e.ts index 394cc9786c..f1b0d90769 100644 --- a/apps/web/playwright/reschedule.e2e.ts +++ b/apps/web/playwright/reschedule.e2e.ts @@ -96,8 +96,6 @@ test.describe("Reschedule Tests", async () => { await page.locator('[data-testid="confirm-reschedule-button"]').click(); - // await page.waitForLoadState("networkidle"); - await expect(page.locator("[data-testid=success-page]")).toBeVisible(); const newBooking = await prisma.booking.findFirstOrThrow({ where: { fromReschedule: booking.uid } }); diff --git a/apps/web/playwright/signup.e2e.ts b/apps/web/playwright/signup.e2e.ts index 4dee6a59c7..348994717c 100644 --- a/apps/web/playwright/signup.e2e.ts +++ b/apps/web/playwright/signup.e2e.ts @@ -25,7 +25,7 @@ test.describe("Signup Flow Test", async () => { }); await page.goto("/signup"); - // await page.waitForLoadState("networkidle"); + await expect(page.locator("text=Create your account")).toBeVisible(); const alertMessage = "Username or email is already taken"; @@ -52,7 +52,8 @@ test.describe("Signup Flow Test", async () => { }); await page.goto("/signup"); - // await page.waitForLoadState("networkidle"); + + await expect(page.locator("text=Create your account")).toBeVisible(); const alertMessage = "Username or email is already taken"; @@ -83,7 +84,7 @@ test.describe("Signup Flow Test", async () => { // Signup with premium username name await page.goto("/signup"); - // await page.waitForLoadState("networkidle"); + await expect(page.locator("text=Create your account")).toBeVisible(); // Fill form await page.locator('input[name="username"]').fill("rock"); @@ -111,7 +112,7 @@ test.describe("Signup Flow Test", async () => { }); await page.goto("/signup"); - // await page.waitForLoadState("networkidle"); + await expect(page.locator("text=Create your account")).toBeVisible(); // Fill form await page.locator('input[name="username"]').fill(userToCreate.username); @@ -130,6 +131,7 @@ test.describe("Signup Flow Test", async () => { test("Signup fields prefilled with query params", async ({ page, users }) => { const signupUrlWithParams = "/signup?username=rick-jones&email=rick-jones%40example.com"; await page.goto(signupUrlWithParams); + await expect(page.locator("text=Create your account")).toBeVisible(); // Fill form const usernameInput = page.locator('input[name="username"]'); @@ -179,7 +181,7 @@ test.describe("Signup Flow Test", async () => { const signupUrlWithToken = `/signup?token=${token}`; await page.goto(signupUrlWithToken); - // await page.waitForLoadState("networkidle"); + await expect(page.locator("text=Create your account")).toBeVisible(); const usernameField = page.locator('input[name="username"]'); const emailField = page.locator('input[name="email"]'); @@ -210,7 +212,7 @@ test.describe("Signup Flow Test", async () => { }); await page.goto("/signup"); - await page.waitForLoadState("domcontentloaded"); + await expect(page.locator("text=Create your account")).toBeVisible(); // Fill form await page.locator('input[name="username"]').fill(userToCreate.username); @@ -218,7 +220,6 @@ test.describe("Signup Flow Test", async () => { await page.locator('input[name="password"]').fill(userToCreate.password); const submitButton = page.locator('button[type="submit"]'); - await submitButton.waitFor({ state: "attached" }); await expect(submitButton).toBeEnabled(); await submitButton.click(); @@ -250,7 +251,6 @@ test.describe("Signup Flow Test", async () => { const { team } = await teamOwner.getFirstTeamMembership(); await teamOwner.apiLogin(); await page.goto(`/settings/teams/${team.id}/members`); - // await page.waitForLoadState("networkidle"); await test.step("Invite User to team", async () => { // TODO: This invite logic should live in a fixture - its used in team and orgs invites (Duplicated from team/org invites) @@ -258,7 +258,7 @@ test.describe("Signup Flow Test", async () => { await page.locator(`button:text("${t("add")}")`).click(); await page.locator('input[name="inviteUser"]').fill(invitedUserEmail); await page.locator(`button:text("${t("send_invite")}")`).click(); - // await page.waitForLoadState("networkidle"); + const inviteLink = await expectInvitationEmailToBeReceived( page, emails, @@ -279,7 +279,7 @@ test.describe("Signup Flow Test", async () => { const context = await browser.newContext(); const newPage = await context.newPage(); await newPage.goto(inviteLink); - await newPage.waitForLoadState("networkidle"); + await expect(newPage.locator("text=Create your account")).toBeVisible(); const url = new URL(newPage.url()); expect(url.pathname).toBe("/signup"); diff --git a/apps/web/playwright/team/team-invitation.e2e.ts b/apps/web/playwright/team/team-invitation.e2e.ts index 0417a0d2e7..cb05963b10 100644 --- a/apps/web/playwright/team/team-invitation.e2e.ts +++ b/apps/web/playwright/team/team-invitation.e2e.ts @@ -19,7 +19,6 @@ test.describe("Team", () => { const { team } = await teamOwner.getFirstTeamMembership(); await teamOwner.apiLogin(); await page.goto(`/settings/teams/${team.id}/members`); - // await page.waitForLoadState("networkidle"); await test.step("To the team by email (external user)", async () => { const invitedUserEmail = users.trackEmail({ @@ -29,7 +28,6 @@ test.describe("Team", () => { await page.locator(`button:text("${t("add")}")`).click(); await page.locator('input[name="inviteUser"]').fill(invitedUserEmail); await page.locator(`button:text("${t("send_invite")}")`).click(); - // await page.waitForLoadState("networkidle"); const inviteLink = await expectInvitationEmailToBeReceived( page, emails, @@ -66,7 +64,6 @@ test.describe("Team", () => { // Check newly invited member is not pending anymore await page.bringToFront(); await page.goto(`/settings/teams/${team.id}/members`); - // await page.waitForLoadState("networkidle"); await expect( page.locator(`[data-testid="email-${invitedUserEmail.replace("@", "")}-pending"]`) ).toHaveCount(0); @@ -103,7 +100,6 @@ test.describe("Team", () => { const { team } = await teamOwner.getFirstTeamMembership(); await teamOwner.apiLogin(); await page.goto(`/settings/teams/${team.id}/members`); - // await page.waitForLoadState("networkidle"); await test.step("To the organization by email (internal user)", async () => { const invitedUserEmail = users.trackEmail({ @@ -113,7 +109,6 @@ test.describe("Team", () => { await page.locator(`button:text("${t("add")}")`).click(); await page.locator('input[name="inviteUser"]').fill(invitedUserEmail); await page.locator(`button:text("${t("send_invite")}")`).click(); - // await page.waitForLoadState("networkidle"); await expectInvitationEmailToBeReceived( page, emails, diff --git a/apps/web/playwright/teams.e2e.ts b/apps/web/playwright/teams.e2e.ts index ddf0f81587..bb550a03c4 100644 --- a/apps/web/playwright/teams.e2e.ts +++ b/apps/web/playwright/teams.e2e.ts @@ -36,53 +36,6 @@ testBothFutureAndLegacyRoutes.describe("Teams A/B tests", (routeVariant) => { testBothFutureAndLegacyRoutes.describe("Teams - NonOrg", (routeVariant) => { test.afterEach(({ users }) => users.deleteAll()); - test("Team Onboarding Invite Members", async ({ page, users }) => { - const user = await users.create(undefined, { hasTeam: true }); - const { team } = await user.getFirstTeamMembership(); - const inviteeEmail = `${user.username}+invitee@example.com`; - - await user.apiLogin(); - - page.goto(`/settings/teams/${team.id}/onboard-members`); - // await page.waitForLoadState("networkidle"); - - await test.step("Can add members", async () => { - // Click [data-testid="new-member-button"] - await page.locator('[data-testid="new-member-button"]').click(); - // Fill [placeholder="email\@example\.com"] - await page.locator('[placeholder="email\\@example\\.com"]').fill(inviteeEmail); - // Click [data-testid="invite-new-member-button"] - await page.locator('[data-testid="invite-new-member-button"]').click(); - await expect(page.locator(`li:has-text("${inviteeEmail}")`)).toBeVisible(); - await expect(page.locator('[data-testid="pending-member-item"]')).toHaveCount(2); - }); - - await test.step("Can remove members", async () => { - const removeMemberButton = page.locator('[data-testid="remove-member-button"]'); - await removeMemberButton.click(); - await removeMemberButton.waitFor({ state: "hidden" }); - await expect(page.locator('[data-testid="pending-member-item"]')).toHaveCount(1); - // Cleanup here since this user is created without our fixtures. - await prisma.user.delete({ where: { email: inviteeEmail } }); - }); - - await test.step("Finishing brings you to team profile page", async () => { - await page.locator("[data-testid=publish-button]").click(); - await expect(page).toHaveURL(/\/settings\/teams\/(\d+)\/event-type$/i); - await page.locator("[data-testid=handle-later-button]").click(); - await page.waitForURL(/\/settings\/teams\/(\d+)\/profile$/i); - }); - - await test.step("Can disband team", async () => { - await page.locator("text=Disband Team").click(); - await page.locator("text=Yes, disband team").click(); - await page.waitForURL("/teams"); - await expect(await page.locator(`text=${user.username}'s Team`).count()).toEqual(0); - // FLAKY: If other tests are running async this may mean there are >0 teams, empty screen will not be shown. - // await expect(page.locator('[data-testid="empty-screen"]')).toBeVisible(); - }); - }); - test("Can create a booking for Collective EventType", async ({ page, users }) => { const teamMatesObj = [ { name: "teammate-1" }, diff --git a/apps/web/playwright/unpublished.e2e.ts b/apps/web/playwright/unpublished.e2e.ts index 4b81668f0a..85a96046fd 100644 --- a/apps/web/playwright/unpublished.e2e.ts +++ b/apps/web/playwright/unpublished.e2e.ts @@ -47,7 +47,6 @@ test.describe("Unpublished", () => { const { team: org } = await owner.getOrgMembership(); const { requestedSlug } = org.metadata as { requestedSlug: string }; await page.goto(`/org/${requestedSlug}`); - // await page.waitForLoadState("networkidle"); await expect(page.locator('[data-testid="empty-screen"]')).toHaveCount(1); await expect(page.locator(`h2:has-text("${title(org.name)}")`)).toHaveCount(1); await expect(page.locator(`div:text("${description("organization")}")`)).toHaveCount(1); @@ -65,7 +64,6 @@ test.describe("Unpublished", () => { const { requestedSlug } = org.metadata as { requestedSlug: string }; const [{ slug: subteamSlug }] = org.children as { slug: string }[]; await page.goto(`/org/${requestedSlug}/team/${subteamSlug}`); - // await page.waitForLoadState("networkidle"); await expect(page.locator('[data-testid="empty-screen"]')).toHaveCount(1); await expect(page.locator(`h2:has-text("${title(org.name)}")`)).toHaveCount(1); await expect(page.locator(`div:text("${description("organization")}")`)).toHaveCount(1); @@ -84,7 +82,6 @@ test.describe("Unpublished", () => { const [{ slug: subteamSlug, id: subteamId }] = org.children as { slug: string; id: number }[]; const { slug: subteamEventSlug } = await owner.getFirstTeamEvent(subteamId); await page.goto(`/org/${requestedSlug}/team/${subteamSlug}/${subteamEventSlug}`); - // await page.waitForLoadState("networkidle"); await expect(page.locator('[data-testid="empty-screen"]')).toHaveCount(1); await expect(page.locator(`h2:has-text("${title(org.name)}")`)).toHaveCount(1); @@ -97,7 +94,6 @@ test.describe("Unpublished", () => { const { team: org } = await owner.getOrgMembership(); const { requestedSlug } = org.metadata as { requestedSlug: string }; await page.goto(`/org/${requestedSlug}/${owner.username}`); - // await page.waitForLoadState("networkidle"); await expect(page.locator('[data-testid="empty-screen"]')).toHaveCount(1); await expect(page.locator(`h2:has-text("${title(org.name)}")`)).toHaveCount(1); await expect(page.locator(`div:text("${description("organization")}")`)).toHaveCount(1); @@ -110,7 +106,6 @@ test.describe("Unpublished", () => { const { requestedSlug } = org.metadata as { requestedSlug: string }; const [{ slug: ownerEventType }] = owner.eventTypes; await page.goto(`/org/${requestedSlug}/${owner.username}/${ownerEventType}`); - // await page.waitForLoadState("networkidle"); await expect(page.locator('[data-testid="empty-screen"]')).toHaveCount(1); await expect(page.locator(`h2:has-text("${title(org.name)}")`)).toHaveCount(1); await expect(page.locator(`div:text("${description("organization")}")`)).toHaveCount(1); diff --git a/apps/web/playwright/webhook.e2e.ts b/apps/web/playwright/webhook.e2e.ts index 8df73e283b..1e6f70b419 100644 --- a/apps/web/playwright/webhook.e2e.ts +++ b/apps/web/playwright/webhook.e2e.ts @@ -577,30 +577,10 @@ test.describe("MEETING_ENDED, MEETING_STARTED", async () => { expect(newMeetingEndedTriggers.length).toBe(0); // disable webhook - await page.click('[data-testid="webhook-switch"]'); + const submitPromise = page.waitForResponse("/api/trpc/webhook/edit?batch=1"); await page.getByTestId("webhook-switch").click(); - const response = await page.waitForResponse("/api/trpc/webhook/edit?batch=1"); + const response = await submitPromise; expect(response.status()).toBe(200); - // await page.waitForLoadState("networkidle"); - - const scheduledTriggersAfterDisabling = await prisma.webhookScheduledTriggers.findMany({ - where: { - webhook: { - userId: user.id, - }, - }, - select: { - payload: true, - webhook: { - select: { - userId: true, - }, - }, - startAfter: true, - }, - }); - - expect(scheduledTriggersAfterDisabling.length).toBe(0); }); }); @@ -610,7 +590,6 @@ test.describe("FORM_SUBMITTED", async () => { await user.apiLogin(); const webhookReceiver = await webhooks.createReceiver(); - // await page.waitForLoadState("networkidle"); const form = await routingForms.create({ name: "Test Form", @@ -626,8 +605,6 @@ test.describe("FORM_SUBMITTED", async () => { ], }); - // await page.waitForLoadState("networkidle"); - await gotoRoutingLink({ page, formId: form.id }); const fieldName = "name"; await page.fill(`[data-testid="form-field-${fieldName}"]`, "John Doe"); @@ -695,8 +672,6 @@ test.describe("FORM_SUBMITTED", async () => { ], }); - // await page.waitForLoadState("networkidle"); - await gotoRoutingLink({ page, formId: form.id }); const textFieldIdentifier = "name"; const multiSelectFieldIdentifier = "multi"; diff --git a/packages/app-store/routing-forms/playwright/tests/basic.e2e.ts b/packages/app-store/routing-forms/playwright/tests/basic.e2e.ts index 9a9f95fcca..bf024b53d9 100644 --- a/packages/app-store/routing-forms/playwright/tests/basic.e2e.ts +++ b/packages/app-store/routing-forms/playwright/tests/basic.e2e.ts @@ -28,8 +28,6 @@ const Identifiers = { test.describe("Routing Forms", () => { test.describe("Zero State Routing Forms", () => { test("should be able to add a new form and view it", async ({ page }) => { - await page.waitForSelector('[data-testid="empty-screen"]'); - const formId = await addForm(page); await page.click('[href*="/forms"]'); @@ -81,6 +79,7 @@ test.describe("Routing Forms", () => { test.describe("F1<-F2 Relationship", () => { test("Create relationship by adding F1 as route.Editing F1 should update F2", async ({ page }) => { const form1Id = await addForm(page, { name: "F1" }); + await page.goto(`/routing-forms/forms`); const form2Id = await addForm(page, { name: "F2" }); await addOneFieldAndDescriptionAndSaveForm(form1Id, page, { @@ -198,7 +197,6 @@ test.describe("Routing Forms", () => { } ); await user.apiLogin(); - await page.goto(`/routing-forms/forms`); }); test.afterEach(async ({ users }) => { @@ -210,6 +208,9 @@ test.describe("Routing Forms", () => { todo("should be able to duplicate form"); test.describe("Seeded Routing Form ", () => { + test.beforeEach(async ({ page }) => { + await page.goto(`/routing-forms/forms`); + }); test.afterEach(async ({ users }) => { // This also delete forms on cascade await users.deleteAll(); @@ -365,7 +366,6 @@ test.describe("Routing Forms", () => { const routingForm = user.routingForms[0]; await page.goto(`apps/routing-forms/form-edit/${routingForm.id}`); await page.click('[data-testid="test-preview"]'); - // await page.waitForLoadState("networkidle"); //event redirect await page.fill('[data-testid="form-field-Test field"]', "event-routing"); diff --git a/packages/app-store/routing-forms/playwright/tests/testUtils.ts b/packages/app-store/routing-forms/playwright/tests/testUtils.ts index 03220258d1..81bcb5d90c 100644 --- a/packages/app-store/routing-forms/playwright/tests/testUtils.ts +++ b/packages/app-store/routing-forms/playwright/tests/testUtils.ts @@ -2,7 +2,7 @@ import type { Page } from "@playwright/test"; import { expect } from "@playwright/test"; export async function addForm(page: Page, { name = "Test Form Name" } = {}) { - await page.goto("/routing-forms/forms"); + await page.goto(`/routing-forms/forms`); await page.click('[data-testid="new-routing-form"]'); // Choose to create the Form for the user(which is the first option) and not the team await page.click('[data-testid="option-0"]');