Files
calendar/packages/features/webhooks/lib/sendPayload.test.ts
T
Syed Ali ShahbazandGitHub 8b7497b8cd chore: Return webhook version in the header (#26139)
* init

* add tests

* fix type

* type fix

* fix

* fix tests

* fix test
2025-12-27 00:31:20 +00:00

112 lines
3.5 KiB
TypeScript

import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { WebhookVersion } from "./interface/IWebhookRepository";
import sendPayload from "./sendPayload";
describe("sendPayload", () => {
const mockFetch = vi.fn();
beforeEach(() => {
vi.stubGlobal("fetch", mockFetch);
mockFetch.mockResolvedValue({
ok: true,
status: 200,
});
});
afterEach(() => {
vi.unstubAllGlobals();
vi.resetAllMocks();
});
describe("X-Cal-Webhook-Version header", () => {
it("should include X-Cal-Webhook-Version header with the webhook version", async () => {
const webhook = {
subscriberUrl: "https://example.com/webhook",
appId: null,
payloadTemplate: null,
version: WebhookVersion.V_2021_10_20,
};
await sendPayload("test-secret", "BOOKING_CREATED", new Date().toISOString(), webhook, {
title: "Test Booking",
startTime: "2024-01-01T10:00:00Z",
endTime: "2024-01-01T11:00:00Z",
organizer: {
email: "organizer@example.com",
name: "Organizer",
timeZone: "UTC",
language: { locale: "en" },
},
attendees: [],
type: "test-event",
description: "",
} as unknown as Parameters<typeof sendPayload>[4]);
expect(mockFetch).toHaveBeenCalledTimes(1);
const [url, options] = mockFetch.mock.calls[0];
expect(url).toBe("https://example.com/webhook");
expect(options.headers).toHaveProperty("X-Cal-Webhook-Version", "2021-10-20");
});
it("should include X-Cal-Signature-256 header alongside version header", async () => {
const webhook = {
subscriberUrl: "https://example.com/webhook",
appId: null,
payloadTemplate: null,
version: WebhookVersion.V_2021_10_20,
};
await sendPayload("test-secret", "BOOKING_CREATED", new Date().toISOString(), webhook, {
title: "Test Booking",
startTime: "2024-01-01T10:00:00Z",
endTime: "2024-01-01T11:00:00Z",
organizer: {
email: "organizer@example.com",
name: "Organizer",
timeZone: "UTC",
language: { locale: "en" },
},
attendees: [],
type: "test-event",
description: "",
} as unknown as Parameters<typeof sendPayload>[4]);
const [, options] = mockFetch.mock.calls[0];
expect(options.headers).toHaveProperty("X-Cal-Signature-256");
expect(options.headers).toHaveProperty("X-Cal-Webhook-Version");
expect(options.headers).toHaveProperty("Content-Type", "application/json");
});
it("should send correct version for different webhook versions", async () => {
// Test with the current version
const webhook = {
subscriberUrl: "https://example.com/webhook",
appId: null,
payloadTemplate: null,
version: WebhookVersion.V_2021_10_20,
};
await sendPayload("test-secret", "BOOKING_CREATED", new Date().toISOString(), webhook, {
title: "Test",
startTime: "2024-01-01T10:00:00Z",
endTime: "2024-01-01T11:00:00Z",
organizer: {
email: "test@example.com",
name: "Test",
timeZone: "UTC",
language: { locale: "en" },
},
attendees: [],
type: "test",
description: "",
} as unknown as Parameters<typeof sendPayload>[4]);
const [, options] = mockFetch.mock.calls[0];
expect(options.headers["X-Cal-Webhook-Version"]).toBe("2021-10-20");
});
});
});