
* add primary * fix * refactor eventmanager to take `CalendarDestination` * `DestinationCalendar` * fix * wip * wip * Minor fixes (#1156) * Followup for #1242 * Updates schema * Renames fields to destinationCalendar * Migration fixes * Updates user destination calendar * Abstracts convertDate to BaseCalendarApiAdapter * Type fixes * Uses abstracted convertDate method * Abstracts getDuration and getAttendees * Fixes circular dependecy issue * Adds notEmpty util * Reverts empty location string * Fixes property name * Removes deprecated code * WIP * AppleCal is basically CalDav * Fixes missing destinationCalendar * Type fixes * Select primary calendar on Office and gCal * Adds pretty basic instructions for destination calendar * Cleanup * Type fix * Test fixes * Updates test snapshot * Local test fixes * Type fixes Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Omar López <zomars@me.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
102 lines
3.2 KiB
TypeScript
102 lines
3.2 KiB
TypeScript
import { kont } from "kont";
|
|
|
|
import { loginProvider } from "./lib/loginProvider";
|
|
import { createHttpServer, waitFor } from "./lib/testUtils";
|
|
|
|
jest.setTimeout(60e3);
|
|
jest.retryTimes(3);
|
|
|
|
describe("webhooks", () => {
|
|
const ctx = kont()
|
|
.useBeforeEach(
|
|
loginProvider({
|
|
user: "pro",
|
|
path: "/integrations",
|
|
waitForSelector: '[data-testid="new_webhook"]',
|
|
})
|
|
)
|
|
.done();
|
|
|
|
test("add webhook & test that creating an event triggers a webhook call", async () => {
|
|
const { page } = ctx;
|
|
const webhookReceiver = createHttpServer();
|
|
|
|
// --- add webhook
|
|
await page.click('[data-testid="new_webhook"]');
|
|
await expect(page).toHaveSelector("[data-testid='WebhookDialogForm']");
|
|
|
|
await page.fill('[name="subscriberUrl"]', webhookReceiver.url);
|
|
|
|
await page.click("[type=submit]");
|
|
|
|
// dialog is closed
|
|
await expect(page).not.toHaveSelector("[data-testid='WebhookDialogForm']");
|
|
// page contains the url
|
|
await expect(page).toHaveSelector(`text='${webhookReceiver.url}'`);
|
|
|
|
// --- Book the first available day next month in the pro user's "30min"-event
|
|
await page.goto(`http://localhost:3000/pro/30min`);
|
|
await page.click('[data-testid="incrementMonth"]');
|
|
await page.click('[data-testid="day"][data-disabled="false"]');
|
|
await page.click('[data-testid="time"]');
|
|
|
|
// --- fill form
|
|
await page.fill('[name="name"]', "Test Testson");
|
|
await page.fill('[name="email"]', "test@example.com");
|
|
await page.press('[name="email"]', "Enter");
|
|
|
|
// --- check that webhook was called
|
|
await waitFor(() => {
|
|
expect(webhookReceiver.requestList.length).toBe(1);
|
|
});
|
|
|
|
const [request] = webhookReceiver.requestList;
|
|
const body = request.body as any;
|
|
|
|
// remove dynamic properties that differs depending on where you run the tests
|
|
const dynamic = "[redacted/dynamic]";
|
|
body.createdAt = dynamic;
|
|
body.payload.startTime = dynamic;
|
|
body.payload.endTime = dynamic;
|
|
for (const attendee of body.payload.attendees) {
|
|
attendee.timeZone = dynamic;
|
|
}
|
|
body.payload.organizer.timeZone = dynamic;
|
|
body.payload.uid = dynamic;
|
|
body.payload.additionInformation = dynamic;
|
|
|
|
// if we change the shape of our webhooks, we can simply update this by clicking `u`
|
|
// console.log("BODY", body);
|
|
expect(body).toMatchInlineSnapshot(`
|
|
Object {
|
|
"createdAt": "[redacted/dynamic]",
|
|
"payload": Object {
|
|
"additionInformation": "[redacted/dynamic]",
|
|
"attendees": Array [
|
|
Object {
|
|
"email": "test@example.com",
|
|
"name": "Test Testson",
|
|
"timeZone": "[redacted/dynamic]",
|
|
},
|
|
],
|
|
"description": "",
|
|
"destinationCalendar": null,
|
|
"endTime": "[redacted/dynamic]",
|
|
"metadata": Object {},
|
|
"organizer": Object {
|
|
"email": "pro@example.com",
|
|
"name": "Pro Example",
|
|
"timeZone": "[redacted/dynamic]",
|
|
},
|
|
"startTime": "[redacted/dynamic]",
|
|
"title": "30min between Pro Example and Test Testson",
|
|
"type": "30min",
|
|
"uid": "[redacted/dynamic]",
|
|
},
|
|
"triggerEvent": "BOOKING_CREATED",
|
|
}
|
|
`);
|
|
|
|
webhookReceiver.close();
|
|
});
|
|
});
|