From d46e80c2acac7f7dbfc5dab4429cdcef333f2002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Omar=20L=C3=B3pez?= Date: Mon, 16 Oct 2023 19:53:54 -0700 Subject: [PATCH] fix: inconsistent timezones in e2e tests (#11841) * fix: inconsistent timezones in e2e tests * Update users.ts * Update playwright.config.ts * Update playwright.config.ts * Update users.ts * fix: timezone sensitive tests --- apps/web/playwright/fixtures/bookings.ts | 5 +++- apps/web/playwright/fixtures/users.ts | 6 ++--- apps/web/playwright/wipe-my-cal.e2e.ts | 5 +++- playwright.config.ts | 33 ++++++++++++++---------- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/apps/web/playwright/fixtures/bookings.ts b/apps/web/playwright/fixtures/bookings.ts index dc3ebea4d3..56cbd1002f 100644 --- a/apps/web/playwright/fixtures/bookings.ts +++ b/apps/web/playwright/fixtures/bookings.ts @@ -3,13 +3,16 @@ import type { Booking, Prisma } from "@prisma/client"; import short from "short-uuid"; import { v5 as uuidv5 } from "uuid"; -import dayjs from "@calcom/dayjs"; +import _dayjs from "@calcom/dayjs"; import { prisma } from "@calcom/prisma"; const translator = short(); type BookingFixture = ReturnType; +// We default all dayjs calls to use Europe/London timezone +const dayjs = (...args: Parameters) => _dayjs(...args).tz("Europe/London"); + // creates a user fixture instance and stores the collection export const createBookingsFixture = (page: Page) => { const store = { bookings: [], page } as { bookings: BookingFixture[]; page: typeof page }; diff --git a/apps/web/playwright/fixtures/users.ts b/apps/web/playwright/fixtures/users.ts index 2bf8925237..7e8a8b1db2 100644 --- a/apps/web/playwright/fixtures/users.ts +++ b/apps/web/playwright/fixtures/users.ts @@ -4,7 +4,6 @@ import { Prisma as PrismaType } from "@prisma/client"; import { hashSync as hash } from "bcryptjs"; import type { API } from "mailhog"; -import dayjs from "@calcom/dayjs"; import stripe from "@calcom/features/ee/payments/server/stripe"; import { DEFAULT_SCHEDULE, getAvailabilityFromSchedule } from "@calcom/lib/availability"; import { WEBAPP_URL } from "@calcom/lib/constants"; @@ -12,7 +11,7 @@ import { prisma } from "@calcom/prisma"; import { MembershipRole, SchedulingType } from "@calcom/prisma/enums"; import { selectFirstAvailableTimeSlotNextMonth, teamEventSlug, teamEventTitle } from "../lib/testUtils"; -import type { TimeZoneEnum } from "./types"; +import { TimeZoneEnum } from "./types"; // Don't import hashPassword from app as that ends up importing next-auth and initializing it before NEXTAUTH_URL can be updated during tests. export function hashPassword(password: string) { @@ -477,13 +476,14 @@ const createUser = (workerInfo: WorkerInfo, opts?: CustomUserOpts | null): Prism password: hashPassword(uname), emailVerified: new Date(), completedOnboarding: opts?.completedOnboarding ?? true, - timeZone: opts?.timeZone ?? dayjs.tz.guess(), + timeZone: opts?.timeZone ?? TimeZoneEnum.UK, locale: opts?.locale ?? "en", schedules: opts?.completedOnboarding ?? true ? { create: { name: "Working Hours", + timeZone: opts?.timeZone ?? TimeZoneEnum.UK, availability: { createMany: { data: getAvailabilityFromSchedule(DEFAULT_SCHEDULE), diff --git a/apps/web/playwright/wipe-my-cal.e2e.ts b/apps/web/playwright/wipe-my-cal.e2e.ts index 2ec682f221..00c754f85c 100644 --- a/apps/web/playwright/wipe-my-cal.e2e.ts +++ b/apps/web/playwright/wipe-my-cal.e2e.ts @@ -1,6 +1,6 @@ import { expect } from "@playwright/test"; -import dayjs from "@calcom/dayjs"; +import _dayjs from "@calcom/dayjs"; import prisma from "@calcom/prisma"; import { test } from "./lib/fixtures"; @@ -9,6 +9,9 @@ test.describe.configure({ mode: "parallel" }); test.afterEach(({ users }) => users.deleteAll()); +// We default all dayjs calls to use Europe/London timezone +const dayjs = (...args: Parameters) => _dayjs(...args).tz("Europe/London"); + test.describe("Wipe my Cal App Test", () => { test("Browse upcoming bookings and validate button shows and triggering wipe my cal button", async ({ page, diff --git a/playwright.config.ts b/playwright.config.ts index 86a5c6593f..18c7c8222e 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -55,6 +55,14 @@ if (IS_EMBED_REACT_TEST) { }); } +const DEFAULT_CHROMIUM = { + ...devices["Desktop Chrome"], + timezoneId: "Europe/London", + locale: "en-US", + /** If navigation takes more than this, then something's wrong, let's fail fast. */ + navigationTimeout: DEFAULT_NAVIGATION_TIMEOUT, +}; + const config: PlaywrightTestConfig = { forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, @@ -86,12 +94,7 @@ const config: PlaywrightTestConfig = { expect: { timeout: DEFAULT_EXPECT_TIMEOUT, }, - use: { - ...devices["Desktop Chrome"], - locale: "en-US", - /** If navigation takes more than this, then something's wrong, let's fail fast. */ - navigationTimeout: DEFAULT_NAVIGATION_TIMEOUT, - }, + use: DEFAULT_CHROMIUM, }, { name: "@calcom/app-store", @@ -100,12 +103,7 @@ const config: PlaywrightTestConfig = { expect: { timeout: DEFAULT_EXPECT_TIMEOUT, }, - use: { - ...devices["Desktop Chrome"], - locale: "en-US", - /** If navigation takes more than this, then something's wrong, let's fail fast. */ - navigationTimeout: DEFAULT_NAVIGATION_TIMEOUT, - }, + use: DEFAULT_CHROMIUM, }, { name: "@calcom/embed-core", @@ -114,7 +112,11 @@ const config: PlaywrightTestConfig = { expect: { timeout: DEFAULT_EXPECT_TIMEOUT, }, - use: { ...devices["Desktop Chrome"], locale: "en-US", baseURL: "http://localhost:3100/" }, + use: { + ...devices["Desktop Chrome"], + locale: "en-US", + baseURL: "http://localhost:3100/", + }, }, { name: "@calcom/embed-react", @@ -123,7 +125,10 @@ const config: PlaywrightTestConfig = { timeout: DEFAULT_EXPECT_TIMEOUT, }, testMatch: /.*\.e2e\.tsx?/, - use: { ...devices["Desktop Chrome"], locale: "en-US", baseURL: "http://localhost:3101/" }, + use: { + ...DEFAULT_CHROMIUM, + baseURL: "http://localhost:3101/", + }, }, { name: "@calcom/embed-core--firefox",