import { describe, expect, test } from "bun:test"; import { isValidDiscordWebhookUrl, previewWebhookTemplate, } from "@/lib/discord-webhook-settings"; import { parseResultFilters, resultFiltersToSearchParams, } from "@/lib/admin-form-results"; describe("Discord webhook settings", () => { test("accepts only Discord webhook endpoints", () => { expect( isValidDiscordWebhookUrl( "https://discord.com/api/webhooks/123/secret-token" ) ).toBe(true); expect(isValidDiscordWebhookUrl("https://example.com/api/webhooks/1/2")).toBe( false ); expect(isValidDiscordWebhookUrl("not a URL")).toBe(false); }); test("previews known variables without removing unknown variables", () => { expect( previewWebhookTemplate("{username}: {1} {unknown}") ).toBe("Example User: Example answer 1 {unknown}"); expect(previewWebhookTemplate("{update}", { update: true })).toContain( "Previous answer" ); }); }); describe("response filters", () => { test("normalizes unsupported and unsafe query values", () => { expect( parseResultFilters({ page: "-5", sort: "other", direction: "sideways", edited: "maybe", dateFrom: "27/07/2026", }) ).toEqual({ q: "", page: 1, sort: "submittedAt", direction: "desc", edited: "all", dateFrom: "", dateTo: "", }); }); test("preserves active filters when changing page", () => { const filters = parseResultFilters({ q: "Erika", edited: "edited", dateFrom: "2026-07-01", }); const params = new URLSearchParams( resultFiltersToSearchParams(filters, { page: 2 }) ); expect(params.get("q")).toBe("Erika"); expect(params.get("edited")).toBe("edited"); expect(params.get("page")).toBe("2"); }); });