passwordPolicy.test.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /* @vitest-environment node */
  2. import { describe, it, expect } from "vitest";
  3. import {
  4. validateNewPassword,
  5. PASSWORD_POLICY,
  6. PASSWORD_POLICY_REASON,
  7. } from "./passwordPolicy.js";
  8. describe("lib/auth/passwordPolicy", () => {
  9. it("accepts a strong password", () => {
  10. const res = validateNewPassword({
  11. newPassword: "StrongPassword123",
  12. currentPassword: "OldPassword123",
  13. });
  14. expect(res.ok).toBe(true);
  15. expect(res.reasons).toEqual([]);
  16. expect(res.policy).toEqual(PASSWORD_POLICY);
  17. });
  18. it("rejects too short passwords", () => {
  19. const res = validateNewPassword({
  20. newPassword: "Abc1",
  21. currentPassword: "OldPassword123",
  22. });
  23. expect(res.ok).toBe(false);
  24. expect(res.reasons).toContain(PASSWORD_POLICY_REASON.MIN_LENGTH);
  25. });
  26. it("rejects passwords without numbers", () => {
  27. const res = validateNewPassword({
  28. newPassword: "VeryStrongPassword",
  29. currentPassword: "OldPassword123",
  30. });
  31. expect(res.ok).toBe(false);
  32. expect(res.reasons).toContain(PASSWORD_POLICY_REASON.MISSING_NUMBER);
  33. });
  34. it("rejects passwords without letters", () => {
  35. const res = validateNewPassword({
  36. newPassword: "1234567890123",
  37. currentPassword: "OldPassword123",
  38. });
  39. expect(res.ok).toBe(false);
  40. expect(res.reasons).toContain(PASSWORD_POLICY_REASON.MISSING_LETTER);
  41. });
  42. it("rejects when new password equals current password", () => {
  43. const res = validateNewPassword({
  44. newPassword: "SamePassword123",
  45. currentPassword: "SamePassword123",
  46. });
  47. expect(res.ok).toBe(false);
  48. expect(res.reasons).toContain(PASSWORD_POLICY_REASON.SAME_AS_CURRENT);
  49. });
  50. });