From 6986b5af404dc1953a38fc4878c6d296fdff6cb1 Mon Sep 17 00:00:00 2001 From: Nafees Nazik <84864519+G3root@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:12:22 +0530 Subject: [PATCH] Fix: availability not deleteable (#8086) * fix: make availability deletable * test: add e2e * chore: add test id * test: add a new test * fix: remove utility --- apps/web/pages/availability/index.tsx | 9 ++------- apps/web/playwright/availability.e2e.ts | 19 ++++++++++++++++++- .../schedules/components/ScheduleListItem.tsx | 15 ++++++++++++--- packages/ui/components/toast/showToast.tsx | 6 +++--- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/apps/web/pages/availability/index.tsx b/apps/web/pages/availability/index.tsx index 3acb557a55..742f3b3a9c 100644 --- a/apps/web/pages/availability/index.tsx +++ b/apps/web/pages/availability/index.tsx @@ -92,14 +92,9 @@ export function AvailabilityList({ schedules }: RouterOutputs["viewer"]["availab }} key={schedule.id} schedule={schedule} + isDeletable={schedules.length !== 1} updateDefault={updateMutation.mutate} - deleteFunction={() => { - if (schedules.length === 1) { - showToast(t("requires_at_least_one_schedule"), "error"); - } else { - deleteMutation.mutate; - } - }} + deleteFunction={deleteMutation.mutate} /> ))} diff --git a/apps/web/playwright/availability.e2e.ts b/apps/web/playwright/availability.e2e.ts index 4bebb0f0d8..abee0f3a49 100644 --- a/apps/web/playwright/availability.e2e.ts +++ b/apps/web/playwright/availability.e2e.ts @@ -43,12 +43,29 @@ test.describe("Availablity tests", () => { }); }); - test("Availablity pages", async ({ page }) => { + test("Availability pages", async ({ page }) => { await test.step("Can add a new schedule", async () => { await page.locator('[data-testid="new-schedule"]').click(); await page.locator('[id="name"]').fill("More working hours"); page.locator('[type="submit"]').click(); await expect(page.locator("[data-testid=availablity-title]")).toHaveValue("More working hours"); }); + await test.step("Can delete a schedule", async () => { + await page.getByRole("button", { name: /Go Back/i }).click(); + await page.locator('[data-testid="schedules"] > li').nth(1).getByTestId("schedule-more").click(); + await page.locator('[data-testid="delete-schedule"]').click(); + const toast = await page.waitForSelector('[data-testid="toast-success"]'); + expect(toast).toBeTruthy(); + + await expect(page.locator('[data-testid="schedules"] > li').nth(1)).toHaveCount(0); + }); + await test.step("Cannot delete a schedule if a single schedule is present", async () => { + await page.locator('[data-testid="schedules"] > li').nth(0).getByTestId("schedule-more").click(); + await page.locator('[data-testid="delete-schedule"]').click(); + const toast = await page.waitForSelector('[data-testid="toast-error"]'); + expect(toast).toBeTruthy(); + + await expect(page.locator('[data-testid="schedules"] > li').nth(0)).toHaveCount(1); + }); }); }); diff --git a/packages/features/schedules/components/ScheduleListItem.tsx b/packages/features/schedules/components/ScheduleListItem.tsx index 67799ae0ad..dff3602541 100644 --- a/packages/features/schedules/components/ScheduleListItem.tsx +++ b/packages/features/schedules/components/ScheduleListItem.tsx @@ -13,6 +13,7 @@ import { DropdownMenuItem, DropdownItem, DropdownMenuTrigger, + showToast, } from "@calcom/ui"; import { FiGlobe, FiMoreHorizontal, FiTrash, FiClock } from "@calcom/ui/components/icon"; @@ -21,6 +22,7 @@ export function ScheduleListItem({ deleteFunction, displayOptions, updateDefault, + isDeletable, }: { schedule: RouterOutputs["viewer"]["availability"]["list"]["schedules"][number]; deleteFunction: ({ scheduleId }: { scheduleId: number }) => void; @@ -28,6 +30,7 @@ export function ScheduleListItem({ timeZone?: string; hour12?: boolean; }; + isDeletable: boolean; updateDefault: ({ scheduleId, isDefault }: { scheduleId: number; isDefault: boolean }) => void; }) { const { t, i18n } = useLocale(); @@ -74,6 +77,7 @@ export function ScheduleListItem({