diff --git a/apps/web/test/utils/bookingScenario/MockPaymentService.ts b/apps/web/test/utils/bookingScenario/MockPaymentService.ts index ecfe0f322d..a78c744781 100644 --- a/apps/web/test/utils/bookingScenario/MockPaymentService.ts +++ b/apps/web/test/utils/bookingScenario/MockPaymentService.ts @@ -1,3 +1,5 @@ +import prismaMock from "../../../../../tests/libs/__mocks__/prisma"; + import type { Payment, Prisma, PaymentOption, Booking } from "@prisma/client"; import { v4 as uuidv4 } from "uuid"; import "vitest-fetch-mock"; @@ -7,8 +9,6 @@ import logger from "@calcom/lib/logger"; import type { CalendarEvent } from "@calcom/types/Calendar"; import type { IAbstractPaymentService } from "@calcom/types/PaymentService"; -import prismaMock from "../../../../../tests/libs/__mocks__/prisma"; - export function getMockPaymentService() { function createPaymentLink(/*{ paymentUid, name, email, date }*/) { return "http://mock-payment.example.com/"; diff --git a/apps/web/test/utils/bookingScenario/expects.ts b/apps/web/test/utils/bookingScenario/expects.ts index b5263c735c..413b637c8a 100644 --- a/apps/web/test/utils/bookingScenario/expects.ts +++ b/apps/web/test/utils/bookingScenario/expects.ts @@ -232,3 +232,36 @@ export function expectBookingRequestedWebhookToHaveBeenFired({ }); } } + +export function expectBookingCreatedWebhookToHaveBeenFired({ + organizer, + booker, + location, + subscriberUrl, + paidEvent, + videoCallUrl, +}: { + organizer: { email: string; name: string }; + booker: { email: string; name: string }; + subscriberUrl: string; + location: string; + paidEvent?: boolean; + videoCallUrl: string; +}) { + expectWebhookToHaveBeenCalledWith(subscriberUrl, { + triggerEvent: "BOOKING_CREATED", + payload: { + metadata: { + videoCallUrl, + }, + responses: { + name: { label: "your_name", value: booker.name }, + email: { label: "email_address", value: booker.email }, + location: { + label: "location", + value: { optionValue: "", value: location }, + }, + }, + }, + }); +} diff --git a/packages/features/bookings/lib/handleNewBooking.test.ts b/packages/features/bookings/lib/handleNewBooking.test.ts index 6b07b06554..1aaff64aeb 100644 --- a/packages/features/bookings/lib/handleNewBooking.test.ts +++ b/packages/features/bookings/lib/handleNewBooking.test.ts @@ -37,6 +37,7 @@ import { expectAwaitingPaymentEmails, expectBookingRequestedEmails, expectBookingRequestedWebhookToHaveBeenFired, + expectBookingCreatedWebhookToHaveBeenFired, } from "@calcom/web/test/utils/bookingScenario/expects"; type CustomNextApiRequest = NextApiRequest & Request; @@ -148,23 +149,13 @@ describe("handleNewBooking", () => { expectWorkflowToBeTriggered(); expectSuccessfulBookingCreationEmails({booker, organizer, emails}) - - expectWebhookToHaveBeenCalledWith("http://my-webhook.example.com", { - triggerEvent: "BOOKING_CREATED", - payload: { - metadata: { - videoCallUrl: `${WEBAPP_URL}/video/DYNAMIC_UID`, - }, - responses: { - name: { label: "your_name", value: "Booker" }, - email: { label: "email_address", value: "booker@example.com" }, - location: { - label: "location", - value: { optionValue: "", value: "integrations:daily" }, - }, - }, - }, - }); + expectBookingCreatedWebhookToHaveBeenFired({ + booker, + organizer, + location: "integrations:daily", + subscriberUrl: "http://my-webhook.example.com", + videoCallUrl: `${WEBAPP_URL}/video/DYNAMIC_UID`, + }) }, timeout ); @@ -292,6 +283,7 @@ describe('Event Type that requires confirmation', () => { email: "booker@example.com", name: "Booker", }); + const subscriberUrl = "http://my-webhook.example.com" const organizer = getOrganizer({ name: "Organizer", @@ -307,7 +299,7 @@ describe('Event Type that requires confirmation', () => { { userId: organizer.id, eventTriggers: ["BOOKING_CREATED"], - subscriberUrl: "http://my-webhook.example.com", + subscriberUrl, active: true, eventTypeId: 1, appId: null, @@ -380,22 +372,14 @@ describe('Event Type that requires confirmation', () => { expectSuccessfulBookingCreationEmails({booker, organizer, emails}) - expectWebhookToHaveBeenCalledWith("http://my-webhook.example.com", { - triggerEvent: "BOOKING_CREATED", - payload: { - metadata: { - videoCallUrl: `${WEBAPP_URL}/video/DYNAMIC_UID`, - }, - responses: { - name: { label: "your_name", value: "Booker" }, - email: { label: "email_address", value: "booker@example.com" }, - location: { - label: "location", - value: { optionValue: "", value: "integrations:daily" }, - }, - }, - }, - }); + + expectBookingCreatedWebhookToHaveBeenFired({ + booker, + organizer, + location: "integrations:daily", + subscriberUrl, + videoCallUrl: `${WEBAPP_URL}/video/DYNAMIC_UID`, + }) }, timeout ); @@ -582,6 +566,7 @@ describe('Event Type that requires confirmation', () => { `should create a successful booking with Zoom if used`, async ({ emails }) => { const handleNewBooking = (await import("@calcom/features/bookings/lib/handleNewBooking")).default; + const subscriberUrl = "http://my-webhook.example.com" const booker = getBooker({ email: "booker@example.com", name: "Booker", @@ -614,7 +599,7 @@ describe('Event Type that requires confirmation', () => { { userId: organizer.id, eventTriggers: ["BOOKING_CREATED"], - subscriberUrl: "http://my-webhook.example.com", + subscriberUrl, active: true, eventTypeId: 1, appId: null, @@ -642,22 +627,13 @@ describe('Event Type that requires confirmation', () => { expectSuccessfulBookingCreationEmails({booker, organizer, emails}) - expectWebhookToHaveBeenCalledWith("http://my-webhook.example.com", { - triggerEvent: "BOOKING_CREATED", - payload: { - metadata: { - videoCallUrl: "http://mock-zoomvideo.example.com", - }, - responses: { - name: { label: "your_name", value: "Booker" }, - email: { label: "email_address", value: "booker@example.com" }, - location: { - label: "location", - value: { optionValue: "", value: "integrations:zoom" }, - }, - }, - }, - }); + expectBookingCreatedWebhookToHaveBeenFired({ + booker, + organizer, + location: "integrations:zoom", + subscriberUrl, + videoCallUrl: "http://mock-zoomvideo.example.com", + }) }, timeout );