59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import {
|
|
invitationAcceptSchema,
|
|
loginSchema,
|
|
mfaSchema,
|
|
otpLoginRequestSchema,
|
|
registerSchema,
|
|
signUpSchema,
|
|
} from "../src/validation.ts";
|
|
|
|
test("authentication schemas reject malformed input", () => {
|
|
expect(registerSchema.parse({ email: "bad", password: "short", displayName: "A" }).ok).toBe(
|
|
false,
|
|
);
|
|
expect(loginSchema.parse({ identifier: "", password: "" }).ok).toBe(false);
|
|
expect(
|
|
otpLoginRequestSchema.parse({ identifier: "person@example.com", method: "voice" }).ok,
|
|
).toBe(false);
|
|
expect(invitationAcceptSchema.parse({ token: "short" }).ok).toBe(false);
|
|
expect(mfaSchema.parse({ mfaToken: "short", method: "unknown", code: "1" }).ok).toBe(false);
|
|
});
|
|
|
|
test("sign-up schema is shared by browser and server registration", () => {
|
|
const invalid = signUpSchema.parse({
|
|
displayName: "A",
|
|
email: "bad",
|
|
password: "weak",
|
|
consent: false,
|
|
});
|
|
expect(invalid.ok).toBe(false);
|
|
expect(invalid.errors).toMatchObject({
|
|
displayName: "Enter your full name",
|
|
email: "Enter a valid email address",
|
|
consent: "Accept the terms and privacy policy to continue",
|
|
});
|
|
|
|
expect(
|
|
signUpSchema.parse({
|
|
displayName: "Ada Lovelace",
|
|
email: "ada@example.com",
|
|
password: "StrongPassword123",
|
|
consent: true,
|
|
}).ok,
|
|
).toBe(true);
|
|
});
|
|
|
|
test("built-in browser schema registry covers packaged auth forms", async () => {
|
|
const { authBrowserSchemaDescriptors, authSchemas } = await import("../src/validation.ts");
|
|
const descriptors = authBrowserSchemaDescriptors(authSchemas);
|
|
expect(descriptors["auth-register"]).toBeDefined();
|
|
expect(descriptors["auth-password-request"]).toBeDefined();
|
|
expect(descriptors["auth-session-revoke"]).toBeDefined();
|
|
expect(descriptors["auth-authenticator-setup"]).toBeDefined();
|
|
expect(descriptors["auth-authenticator-confirm"]).toBeDefined();
|
|
expect(descriptors["auth-authenticator-disable"]).toBeDefined();
|
|
expect(descriptors["auth-recovery-codes"]).toBeDefined();
|
|
expect(descriptors["auth-empty"]).toBeDefined();
|
|
});
|