import { describe, expect, it } from "vitest"; import { admissionDenialMessage, DEFAULT_ADMISSION_MESSAGES, parseAdmissionMessages } from "./admission-settings"; describe("admission message settings", () => { it("normalizes three independently configured denial messages", () => { const formData = new FormData(); formData.set("registrationMessage", " Register your account before joining. "); formData.set("groupAccessDeniedMessage", "This group cannot access the server right now."); formData.set("vpnDeniedMessage", "VPN access requires a host-approved exception."); expect(parseAdmissionMessages(formData)).toEqual({ registrationMessage: "Register your account before joining.", groupAccessDeniedMessage: "This group cannot access the server right now.", vpnDeniedMessage: "VPN access requires a host-approved exception.", }); }); it("selects the configured message for each admission denial reason", () => { expect(admissionDenialMessage("not_registered", DEFAULT_ADMISSION_MESSAGES)).toBe(DEFAULT_ADMISSION_MESSAGES.registrationMessage); expect(admissionDenialMessage("group_access_disabled", DEFAULT_ADMISSION_MESSAGES)).toBe(DEFAULT_ADMISSION_MESSAGES.groupAccessDeniedMessage); expect(admissionDenialMessage("anonymized_network_disallowed", DEFAULT_ADMISSION_MESSAGES)).toBe(DEFAULT_ADMISSION_MESSAGES.vpnDeniedMessage); }); it("rejects missing, short, overlong, or control-character messages", () => { for (const invalid of ["short", "a".repeat(501), "Denied\nInjected"] as const) { const formData = new FormData(); formData.set("registrationMessage", DEFAULT_ADMISSION_MESSAGES.registrationMessage); formData.set("groupAccessDeniedMessage", DEFAULT_ADMISSION_MESSAGES.groupAccessDeniedMessage); formData.set("vpnDeniedMessage", invalid); expect(parseAdmissionMessages(formData)).toBeNull(); } }); });