From 386f60ca6d0e8b58ace17f57f34c3468c7426e54 Mon Sep 17 00:00:00 2001 From: Keith Williams Date: Wed, 24 Sep 2025 16:41:54 -0300 Subject: [PATCH] refactor: replace prismaMock with BookingRepository mock in checkDurationLimits tests (#24050) - Replace prismaMock. mocks with BookingRepository.getTotalBookingDuration mocks - Update return values from [{ totalMinutes: X }] to X to match repository method signature - Follow existing repository mocking pattern used in other test files - All tests pass with the new mocking approach Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- apps/web/test/lib/checkDurationLimits.test.ts | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/web/test/lib/checkDurationLimits.test.ts b/apps/web/test/lib/checkDurationLimits.test.ts index 52a5877e04..f90254791b 100644 --- a/apps/web/test/lib/checkDurationLimits.test.ts +++ b/apps/web/test/lib/checkDurationLimits.test.ts @@ -1,6 +1,4 @@ -import prismaMock from "../../../../tests/libs/__mocks__/prismaMock"; - -import { describe, expect, it } from "vitest"; +import { describe, expect, it, vi } from "vitest"; import dayjs from "@calcom/dayjs"; import { @@ -9,6 +7,13 @@ import { } from "@calcom/lib/intervalLimits/server/checkDurationLimits"; import { validateIntervalLimitOrder } from "@calcom/lib/intervalLimits/validateIntervalLimitOrder"; +const mockGetTotalBookingDuration = vi.fn(); +vi.mock("@calcom/lib/server/repository/booking", () => ({ + BookingRepository: vi.fn().mockImplementation(() => ({ + getTotalBookingDuration: mockGetTotalBookingDuration, + })), +})); + type MockData = { id: number; startDate: Date; @@ -22,19 +27,19 @@ const MOCK_DATA: MockData = { // Path: apps/web/test/lib/checkDurationLimits.ts describe("Check Duration Limits Tests", () => { it("Should return no errors if limit is not reached", async () => { - prismaMock.$queryRaw.mockResolvedValue([{ totalMinutes: 0 }]); + mockGetTotalBookingDuration.mockResolvedValue(0); await expect( checkDurationLimits({ PER_DAY: 60 }, MOCK_DATA.startDate, MOCK_DATA.id) ).resolves.toBeTruthy(); }); it("Should throw an error if limit is reached", async () => { - prismaMock.$queryRaw.mockResolvedValue([{ totalMinutes: 60 }]); + mockGetTotalBookingDuration.mockResolvedValue(60); await expect( checkDurationLimits({ PER_DAY: 60 }, MOCK_DATA.startDate, MOCK_DATA.id) ).rejects.toThrowError(); }); it("Should pass with multiple duration limits", async () => { - prismaMock.$queryRaw.mockResolvedValue([{ totalMinutes: 30 }]); + mockGetTotalBookingDuration.mockResolvedValue(30); await expect( checkDurationLimits( { @@ -47,7 +52,7 @@ describe("Check Duration Limits Tests", () => { ).resolves.toBeTruthy(); }); it("Should pass with multiple duration limits with one undefined", async () => { - prismaMock.$queryRaw.mockResolvedValue([{ totalMinutes: 30 }]); + mockGetTotalBookingDuration.mockResolvedValue(30); await expect( checkDurationLimits( { @@ -60,7 +65,7 @@ describe("Check Duration Limits Tests", () => { ).resolves.toBeTruthy(); }); it("Should return no errors if limit is not reached with multiple bookings", async () => { - prismaMock.$queryRaw.mockResolvedValue([{ totalMinutes: 60 }]); + mockGetTotalBookingDuration.mockResolvedValue(60); await expect( checkDurationLimits( { @@ -73,7 +78,7 @@ describe("Check Duration Limits Tests", () => { ).resolves.toBeTruthy(); }); it("Should throw an error if one of the limit is reached with multiple bookings", async () => { - prismaMock.$queryRaw.mockResolvedValue([{ totalMinutes: 90 }]); + mockGetTotalBookingDuration.mockResolvedValue(90); await expect( checkDurationLimits( { @@ -90,7 +95,7 @@ describe("Check Duration Limits Tests", () => { // Path: apps/web/test/lib/checkDurationLimits.ts describe("Check Duration Limit Tests", () => { it("Should return no busyTimes and no error if limit is not reached", async () => { - prismaMock.$queryRaw.mockResolvedValue([{ totalMinutes: 60 }]); + mockGetTotalBookingDuration.mockResolvedValue(60); await expect( checkDurationLimit({ key: "PER_DAY",