Files
erika/lib/admin-form-ux.test.ts
T

69 lines
1.8 KiB
TypeScript

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");
});
});