From 32ff7ffed1884bf64bbc38af4df2447479045c80 Mon Sep 17 00:00:00 2001 From: Benny Joo Date: Mon, 30 Dec 2024 03:20:58 -0500 Subject: [PATCH] chore: reduce test time for onboarding e2e test (#18403) --- apps/web/playwright/onboarding.e2e.ts | 153 ++++++++++++-------------- 1 file changed, 73 insertions(+), 80 deletions(-) diff --git a/apps/web/playwright/onboarding.e2e.ts b/apps/web/playwright/onboarding.e2e.ts index 94aecd6faca589..dd93e58ff57e3c 100644 --- a/apps/web/playwright/onboarding.e2e.ts +++ b/apps/web/playwright/onboarding.e2e.ts @@ -1,93 +1,86 @@ -/* eslint-disable playwright/no-skipped-test */ import { expect } from "@playwright/test"; import { IdentityProvider } from "@calcom/prisma/enums"; import { test } from "./lib/fixtures"; -test.describe.configure({ mode: "serial" }); +test.describe.configure({ mode: "parallel" }); test.afterEach(({ users }) => users.deleteAll()); test.describe("Onboarding", () => { - test.describe("Onboarding v2", () => { - const testOnboarding = (identityProvider: IdentityProvider) => { - test(`Onboarding Flow - ${identityProvider} user`, async ({ page, users }) => { - const user = await users.create({ - completedOnboarding: false, - name: null, - identityProvider, - }); - await user.apiLogin(); - await page.goto("/getting-started"); - // tests whether the user makes it to /getting-started - // after login with completedOnboarding false - await page.waitForURL("/getting-started"); - - await test.step("step 1 - User Settings", async () => { - // Check required fields - await page.locator("button[type=submit]").click(); - await expect(page.locator("data-testid=required")).toBeVisible(); - - // happy path - await page.locator("input[name=username]").fill("new user onboarding"); - await page.locator("input[name=name]").fill("new user 2"); - await page.locator("input[role=combobox]").click(); - await page - .locator("*") - .filter({ hasText: /^Europe\/London/ }) - .first() - .click(); - await page.locator("button[type=submit]").click(); - - await expect(page).toHaveURL(/.*connected-calendar/); - - const userComplete = await user.self(); - expect(userComplete.name).toBe("new user 2"); - }); - - await test.step("step 2 - Connected Calendar", async () => { - const isDisabled = await page.locator("button[data-testid=save-calendar-button]").isDisabled(); - await expect(isDisabled).toBe(true); - // tests skip button, we don't want to test entire flow. - await page.locator("button[data-testid=skip-step]").click(); - - await expect(page).toHaveURL(/.*connected-video/); - }); - - await test.step("step 3 - Connected Video", async () => { - const isDisabled = await page.locator("button[data-testid=save-video-button]").isDisabled(); - await expect(isDisabled).toBe(true); - // tests skip button, we don't want to test entire flow. - await page.locator("button[data-testid=skip-step]").click(); - - await expect(page).toHaveURL(/.*setup-availability/); - }); - - await test.step("step 4 - Setup Availability", async () => { - const isDisabled = await page.locator("button[data-testid=save-availability]").isDisabled(); - await expect(isDisabled).toBe(false); - // same here, skip this step. - await page.locator("button[data-testid=save-availability]").click(); - - await expect(page).toHaveURL(/.*user-profile/); - }); - - await test.step("step 5- User Profile", async () => { - await page.locator("button[type=submit]").click(); - - // should redirect to /event-types after onboarding - await page.waitForURL("/event-types"); - - const userComplete = await user.self(); - - expect(userComplete.bio?.replace("


", "").length).toBe(0); - }); + const testOnboarding = (identityProvider: IdentityProvider) => { + test(`Onboarding Flow - ${identityProvider} user`, async ({ page, users }) => { + const user = await users.create({ + completedOnboarding: false, + name: null, + identityProvider, }); - }; + await user.apiLogin(); + await page.goto("/getting-started"); + // tests whether the user makes it to /getting-started + // after login with completedOnboarding false + await page.waitForURL("/getting-started"); + + await test.step("step 1 - User Settings", async () => { + // Check required fields + await page.locator("button[type=submit]").click(); + await expect(page.locator("data-testid=required")).toBeVisible(); + + // happy path + await page.locator("input[name=username]").fill("new user onboarding"); + await page.locator("input[name=name]").fill("new user 2"); + await page.locator("input[role=combobox]").click(); + await page + .locator("*") + .filter({ hasText: /^Europe\/London/ }) + .first() + .click(); + await page.locator("button[type=submit]").click(); + + await expect(page).toHaveURL(/.*connected-calendar/); + + const userComplete = await user.self(); + expect(userComplete.name).toBe("new user 2"); + }); + + await test.step("step 2 - Connected Calendar", async () => { + const isDisabled = await page.locator("button[data-testid=save-calendar-button]").isDisabled(); + await expect(isDisabled).toBe(true); + // tests skip button, we don't want to test entire flow. + await page.locator("button[data-testid=skip-step]").click(); + await expect(page).toHaveURL(/.*connected-video/); + }); + + await test.step("step 3 - Connected Video", async () => { + const isDisabled = await page.locator("button[data-testid=save-video-button]").isDisabled(); + await expect(isDisabled).toBe(true); + // tests skip button, we don't want to test entire flow. + await page.locator("button[data-testid=skip-step]").click(); + await expect(page).toHaveURL(/.*setup-availability/); + }); + + await test.step("step 4 - Setup Availability", async () => { + const isDisabled = await page.locator("button[data-testid=save-availability]").isDisabled(); + await expect(isDisabled).toBe(false); + // same here, skip this step. + + await page.locator("button[data-testid=save-availability]").click(); + await expect(page).toHaveURL(/.*user-profile/); + }); + + await test.step("step 5- User Profile", async () => { + await page.locator("button[type=submit]").click(); + // should redirect to /event-types after onboarding + await page.waitForURL("/event-types"); + + const userComplete = await user.self(); + expect(userComplete.bio?.replace("


", "").length).toBe(0); + }); + }); + }; - testOnboarding(IdentityProvider.GOOGLE); - testOnboarding(IdentityProvider.CAL); - testOnboarding(IdentityProvider.SAML); - }); + testOnboarding(IdentityProvider.GOOGLE); + testOnboarding(IdentityProvider.CAL); + testOnboarding(IdentityProvider.SAML); });