aboutsummaryrefslogtreecommitdiffstats
path: root/packages/trpc/routers/webhooks.test.ts
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-04-16 19:52:01 +0000
committerMohamed Bassem <me@mbassem.com>2025-04-16 23:50:17 +0000
commit1d780485d731c077009fc76d5fa0e283f6f78d85 (patch)
treee3f95e0c23d5eedc459cd0358fe3b0d6d926b79d /packages/trpc/routers/webhooks.test.ts
parent812354deaa96c37b5a06cfd7cb98df35f8202aa9 (diff)
downloadkarakeep-1d780485d731c077009fc76d5fa0e283f6f78d85.tar.zst
tests: Add tests for various trpc endpoints
Diffstat (limited to 'packages/trpc/routers/webhooks.test.ts')
-rw-r--r--packages/trpc/routers/webhooks.test.ts128
1 files changed, 128 insertions, 0 deletions
diff --git a/packages/trpc/routers/webhooks.test.ts b/packages/trpc/routers/webhooks.test.ts
new file mode 100644
index 00000000..5a136a31
--- /dev/null
+++ b/packages/trpc/routers/webhooks.test.ts
@@ -0,0 +1,128 @@
+import { beforeEach, describe, expect, test } from "vitest";
+
+import type { CustomTestContext } from "../testUtils";
+import { defaultBeforeEach } from "../testUtils";
+
+beforeEach<CustomTestContext>(defaultBeforeEach(true));
+
+describe("Webhook Routes", () => {
+ test<CustomTestContext>("create webhook", async ({ apiCallers }) => {
+ const api = apiCallers[0].webhooks;
+ const newWebhook = await api.create({
+ url: "https://example.com/webhook",
+ events: ["created", "edited"],
+ });
+
+ expect(newWebhook).toBeDefined();
+ expect(newWebhook.url).toEqual("https://example.com/webhook");
+ expect(newWebhook.events).toEqual(["created", "edited"]);
+ expect(newWebhook.hasToken).toBe(false); // Assuming token is not set by default
+ });
+
+ test<CustomTestContext>("update webhook", async ({ apiCallers }) => {
+ const api = apiCallers[0].webhooks;
+
+ // First, create a webhook to update
+ const createdWebhook = await api.create({
+ url: "https://example.com/webhook",
+ events: ["created"],
+ });
+
+ // Update it
+ const updatedWebhook = await api.update({
+ webhookId: createdWebhook.id,
+ url: "https://updated-example.com/webhook",
+ events: ["created", "edited"],
+ token: "test-token",
+ });
+
+ expect(updatedWebhook.url).toEqual("https://updated-example.com/webhook");
+ expect(updatedWebhook.events).toEqual(["created", "edited"]);
+ expect(updatedWebhook.hasToken).toBe(true);
+
+ // Test updating a non-existent webhook
+ await expect(() =>
+ api.update({
+ webhookId: "non-existent-id",
+ url: "https://fail.com",
+ events: ["created"],
+ }),
+ ).rejects.toThrow(/Webhook not found/);
+ });
+
+ test<CustomTestContext>("list webhooks", async ({ apiCallers }) => {
+ const api = apiCallers[0].webhooks;
+
+ // Create a couple of webhooks
+ await api.create({
+ url: "https://example1.com/webhook",
+ events: ["created"],
+ });
+ await api.create({
+ url: "https://example2.com/webhook",
+ events: ["edited"],
+ });
+
+ const result = await api.list();
+ expect(result.webhooks).toBeDefined();
+ expect(result.webhooks.length).toBeGreaterThanOrEqual(2);
+ expect(
+ result.webhooks.some((w) => w.url === "https://example1.com/webhook"),
+ ).toBe(true);
+ expect(
+ result.webhooks.some((w) => w.url === "https://example2.com/webhook"),
+ ).toBe(true);
+ });
+
+ test<CustomTestContext>("delete webhook", async ({ apiCallers }) => {
+ const api = apiCallers[0].webhooks;
+
+ // Create a webhook to delete
+ const createdWebhook = await api.create({
+ url: "https://example.com/webhook",
+ events: ["created"],
+ });
+
+ // Delete it
+ await api.delete({ webhookId: createdWebhook.id });
+
+ // Verify it's deleted
+ await expect(() =>
+ api.update({
+ webhookId: createdWebhook.id,
+ url: "https://updated.com",
+ events: ["created"],
+ }),
+ ).rejects.toThrow(/Webhook not found/);
+ });
+
+ test<CustomTestContext>("privacy for webhooks", async ({ apiCallers }) => {
+ const user1Webhook = await apiCallers[0].webhooks.create({
+ url: "https://user1-webhook.com",
+ events: ["created"],
+ });
+ const user2Webhook = await apiCallers[1].webhooks.create({
+ url: "https://user2-webhook.com",
+ events: ["created"],
+ });
+
+ // User 1 should not access User 2's webhook
+ await expect(() =>
+ apiCallers[0].webhooks.delete({ webhookId: user2Webhook.id }),
+ ).rejects.toThrow(/User is not allowed to access resource/);
+ await expect(() =>
+ apiCallers[0].webhooks.update({
+ webhookId: user2Webhook.id,
+ url: "https://fail.com",
+ events: ["created"],
+ }),
+ ).rejects.toThrow(/User is not allowed to access resource/);
+
+ // List should only show the correct user's webhooks
+ const user1List = await apiCallers[0].webhooks.list();
+ expect(user1List.webhooks.some((w) => w.id === user1Webhook.id)).toBe(true);
+ expect(user1List.webhooks.some((w) => w.id === user2Webhook.id)).toBe(
+ false,
+ );
+ });
+});