From 96d78a03d23f1e4c1e1b2d1869242ae91f992b6f Mon Sep 17 00:00:00 2001 From: Romit <85230081+romitg2@users.noreply.github.com> Date: Mon, 30 Mar 2026 16:23:49 +0530 Subject: [PATCH 1/3] fix: add deterministic ordering to attendee queries in booking-seats e2e tests (#28672) * fix: add deterministic ordering to attendee queries in booking-seats e2e tests Co-Authored-By: romitgabani1 * fix: revert secondAttendeeSeat change, keep original references query per review feedback Co-Authored-By: romitgabani1 --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- apps/web/playwright/booking-seats.e2e.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/web/playwright/booking-seats.e2e.ts b/apps/web/playwright/booking-seats.e2e.ts index a56355a67cf110..8b74780610bdd2 100644 --- a/apps/web/playwright/booking-seats.e2e.ts +++ b/apps/web/playwright/booking-seats.e2e.ts @@ -1,10 +1,8 @@ -import { expect } from "@playwright/test"; -import { v4 as uuidv4 } from "uuid"; - import { randomString } from "@calcom/lib/random"; import prisma from "@calcom/prisma"; import { BookingStatus } from "@calcom/prisma/enums"; - +import { expect } from "@playwright/test"; +import { v4 as uuidv4 } from "uuid"; import { test } from "./lib/fixtures"; import { confirmReschedule, @@ -43,6 +41,7 @@ test.describe("Booking with Seats", () => { name: true, email: true, }, + orderBy: { email: "asc" }, }); const bookingSeats = bookingAttendees.map((attendee) => ({ @@ -136,6 +135,7 @@ test.describe("Reschedule for booking with seats", () => { name: true, email: true, }, + orderBy: { email: "asc" }, }); const bookingSeats = bookingAttendees.map((attendee) => ({ @@ -203,6 +203,7 @@ test.describe("Reschedule for booking with seats", () => { name: true, email: true, }, + orderBy: { email: "asc" }, }); const bookingSeats = bookingAttendees.map((attendee) => ({ @@ -282,6 +283,7 @@ test.describe("Reschedule for booking with seats", () => { name: true, email: true, }, + orderBy: { email: "asc" }, }); const bookingSeats = bookingAttendees.map((attendee) => ({ @@ -475,6 +477,7 @@ test.describe("Reschedule for booking with seats", () => { name: true, email: true, }, + orderBy: { email: "asc" }, }); const bookingSeats = bookingAttendees.map((attendee) => ({ @@ -522,6 +525,7 @@ test.describe("Reschedule for booking with seats", () => { name: true, email: true, }, + orderBy: { email: "asc" }, }); const bookingSeats = bookingAttendees.map((attendee) => ({ From ae0109225872af8d21fa36d8c95b4002417c65b7 Mon Sep 17 00:00:00 2001 From: Felipe <60716370+Felipeness@users.noreply.github.com> Date: Mon, 30 Mar 2026 08:31:11 -0300 Subject: [PATCH 2/3] fix: use i18n for apps count with proper pluralization (#28479) * fix: use i18n for apps count with proper pluralization Replace hardcoded "${installedAppsNumber} apps" with t("number_apps", { count: installedAppsNumber }) for proper i18n pluralization support. Removes the TODO comment that flagged this issue. Closes #28407 * fix: update e2e test to match i18n singular/plural apps count --------- Co-authored-by: Sahitya Chandra Co-authored-by: Romit <85230081+romitg2@users.noreply.github.com> --- apps/web/playwright/apps/analytics/analyticsApps.e2e.ts | 4 ++-- apps/web/playwright/fixtures/apps.ts | 7 +++++-- .../atoms/event-types/hooks/useTabsNavigations.tsx | 3 +-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/web/playwright/apps/analytics/analyticsApps.e2e.ts b/apps/web/playwright/apps/analytics/analyticsApps.e2e.ts index 306b054bcc7151..1f1ee90b542fe3 100644 --- a/apps/web/playwright/apps/analytics/analyticsApps.e2e.ts +++ b/apps/web/playwright/apps/analytics/analyticsApps.e2e.ts @@ -22,9 +22,9 @@ test.describe("check analytics Apps", () => { await page.goto("/event-types"); await appsPage.goToEventType("30 min"); await appsPage.goToAppsTab(); - await appsPage.verifyAppsInfo(0); + await appsPage.verifyAppsInfo(1, 0); await appsPage.activeApp(app); - await appsPage.verifyAppsInfo(1); + await appsPage.verifyAppsInfo(1, 1); }); }); }); diff --git a/apps/web/playwright/fixtures/apps.ts b/apps/web/playwright/fixtures/apps.ts index 353c228f4671c3..7ff8f5f4d04591 100644 --- a/apps/web/playwright/fixtures/apps.ts +++ b/apps/web/playwright/fixtures/apps.ts @@ -127,8 +127,11 @@ export function createAppsFixture(page: Page) { activeApp: async (app: string) => { await page.locator(`[data-testid='${app}-app-switch']`).click(); }, - verifyAppsInfo: async (activeApps: number) => { - await expect(page.locator(`text=1 apps, ${activeApps} active`)).toBeVisible(); + verifyAppsInfo: async (installedApps: number, activeApps: number) => { + const appsLabel = installedApps === 1 ? "app" : "apps"; + await expect( + page.locator(`text=${installedApps} ${appsLabel}, ${activeApps} active`) + ).toBeVisible(); }, verifyAppsInfoNew: async (app: string, eventTypeId: number) => { await page.goto(`event-types/${eventTypeId}?tabName=apps`); diff --git a/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx b/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx index 7abaecd1a0d3e4..7a08cadb9bf372 100644 --- a/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx +++ b/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx @@ -216,8 +216,7 @@ function getNavigation({ name: t("apps"), href: `/event-types/${id}?tabName=apps`, icon: "grid-3x3", - //TODO: Handle proper translation with count handling - info: `${installedAppsNumber} apps, ${enabledAppsNumber} ${t("active")}`, + info: `${t("number_apps", { count: installedAppsNumber })}, ${enabledAppsNumber} ${t("active")}`, "data-testid": "apps", }, ]; From f7b2f2762c3d9d7e5f4b492b856af0d1b80c920b Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Mon, 30 Mar 2026 17:05:02 +0530 Subject: [PATCH 3/3] fix(api-v2): correctly parse ISO timezone offsets when rescheduling bookings (#28333) * fix(api-v2): correctly parse ISO timezone offsets when rescheduling bookings closes: #28310 * fix: clarify reschedule endpoint requires UTC timezone Signed-off-by: Hemant M Mehta --------- Signed-off-by: Hemant M Mehta Co-authored-by: Rajiv Sahal Co-authored-by: Peer Richelsen Co-authored-by: Sahitya Chandra Co-authored-by: Romit <85230081+romitg2@users.noreply.github.com> --- .../2024-08-13/inputs/reschedule-booking.input.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/platform/types/bookings/2024-08-13/inputs/reschedule-booking.input.ts b/packages/platform/types/bookings/2024-08-13/inputs/reschedule-booking.input.ts index 233b8aaa3cfa06..4089104a9cb0af 100644 --- a/packages/platform/types/bookings/2024-08-13/inputs/reschedule-booking.input.ts +++ b/packages/platform/types/bookings/2024-08-13/inputs/reschedule-booking.input.ts @@ -8,8 +8,8 @@ owner will have to confirm the rescheduled booking.`; export class RescheduleBookingInput_2024_08_13 { @IsDateString() @ApiProperty({ - description: "Start time in ISO 8601 format for the new booking", - example: "2024-08-13T10:00:00Z", + description: "The start time of the booking in ISO 8601 format in UTC timezone.", + example: "2024-08-13T09:00:00Z", }) start!: string; @@ -47,8 +47,8 @@ export class RescheduleBookingInput_2024_08_13 { export class RescheduleSeatedBookingInput_2024_08_13 { @IsDateString() @ApiProperty({ - description: "Start time in ISO 8601 format for the new booking", - example: "2024-08-13T10:00:00Z", + description: "The start time of the booking in ISO 8601 format in UTC timezone.", + example: "2024-08-13T09:00:00Z", }) start!: string;