69 lines
1.8 KiB
TypeScript
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");
|
|
});
|
|
});
|