Files
erika/lib/submission-webhook.test.ts
T

99 lines
2.7 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { submissionWebhookMessage } from "@/lib/submission-webhook";
import type {
NormalizedSubmissionAnswer,
SubmissionQuestion,
} from "@/lib/submission-intake";
const questions: SubmissionQuestion[] = [
{
id: "name",
type: "text",
label: "Character name",
required: true,
options: [],
allowOther: false,
},
];
const answers: NormalizedSubmissionAnswer[] = [
{
questionId: "name",
value: "Erika",
imageCdnId: null,
displayValue: "Erika",
},
];
test("uses an image URL for image-only placeholders", () => {
expect(submissionWebhookMessage({
template: "Image: {1}",
isUpdate: false,
userName: "Gunshiz",
discordId: "123",
submissionLink: "https://erika.sudloh.com/admin/form/form-1/result/submission-1",
questions,
answers: [{
questionId: "name",
value: "",
imageCdnId: "img-1",
displayValue: "",
}],
oldAnswersByQuestionId: {},
})).toBe("Image: /cdn/img-1");
});
test("uses the configured template", () => {
expect(submissionWebhookMessage({
template: "New answer: {1} by {username} ({id})",
isUpdate: false,
userName: "Gunshiz",
discordId: "123",
submissionLink: "https://erika.sudloh.com/admin/form/form-1/result/submission-1",
questions,
answers,
oldAnswersByQuestionId: {},
})).toBe("New answer: Erika by Gunshiz (123)");
});
test("uses a submission result link placeholder", () => {
expect(submissionWebhookMessage({
template: "Review: {link}",
isUpdate: false,
userName: "Gunshiz",
discordId: "123",
submissionLink: "https://erika.sudloh.com/admin/form/form-1/result/submission-1",
questions,
answers,
oldAnswersByQuestionId: {},
})).toBe("Review: https://erika.sudloh.com/admin/form/form-1/result/submission-1");
});
describe("default templates", () => {
test("sends a new-submission message when its template is blank", () => {
expect(submissionWebhookMessage({
template: null,
isUpdate: false,
userName: "Gunshiz",
discordId: "123",
submissionLink: "https://erika.sudloh.com/admin/form/form-1/result/submission-1",
questions,
answers,
oldAnswersByQuestionId: {},
})).toBe("New submission from Gunshiz (123).");
});
test("sends an update message when its template is blank", () => {
expect(submissionWebhookMessage({
template: " ",
isUpdate: true,
userName: "Gunshiz",
discordId: "123",
submissionLink: "https://erika.sudloh.com/admin/form/form-1/result/submission-1",
questions,
answers,
oldAnswersByQuestionId: { name: "Old name" },
})).toContain("Submission updated by Gunshiz (123).");
});
});