validateEnv.test.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { describe, it, expect } from "vitest";
  2. import { validateEnv, MIN_SESSION_SECRET_LENGTH } from "./validateEnv.js";
  3. function validSecret() {
  4. return "x".repeat(MIN_SESSION_SECRET_LENGTH);
  5. }
  6. describe("validateEnv", () => {
  7. it("returns normalized config for a valid env", () => {
  8. const cfg = validateEnv({
  9. MONGODB_URI: "mongodb://localhost:27017/rhl",
  10. SESSION_SECRET: validSecret(),
  11. NAS_ROOT_PATH: "/mnt/niederlassungen/",
  12. PORT: "3000",
  13. });
  14. expect(cfg.mongodbUri).toBe("mongodb://localhost:27017/rhl");
  15. expect(cfg.sessionSecret).toBe(validSecret());
  16. expect(cfg.nasRootPath).toBe("/mnt/niederlassungen");
  17. expect(cfg.nodeEnv).toBe("development");
  18. expect(cfg.port).toBe(3000);
  19. expect(cfg.searchProvider).toBe("fs");
  20. });
  21. it("accepts optional SESSION_COOKIE_SECURE=false", () => {
  22. expect(() =>
  23. validateEnv({
  24. MONGODB_URI: "mongodb://localhost:27017/rhl",
  25. SESSION_SECRET: validSecret(),
  26. NAS_ROOT_PATH: "/mnt/niederlassungen",
  27. NODE_ENV: "production",
  28. SESSION_COOKIE_SECURE: "false",
  29. })
  30. ).not.toThrow();
  31. });
  32. it("rejects invalid SEARCH_PROVIDER values", () => {
  33. expect(() =>
  34. validateEnv({
  35. MONGODB_URI: "mongodb://localhost:27017/rhl",
  36. SESSION_SECRET: validSecret(),
  37. NAS_ROOT_PATH: "/mnt/niederlassungen",
  38. SEARCH_PROVIDER: "nope",
  39. })
  40. ).toThrow(/SEARCH_PROVIDER/i);
  41. });
  42. it("requires Qsirch env keys when SEARCH_PROVIDER=qsirch", () => {
  43. expect(() =>
  44. validateEnv({
  45. MONGODB_URI: "mongodb://localhost:27017/rhl",
  46. SESSION_SECRET: validSecret(),
  47. NAS_ROOT_PATH: "/mnt/niederlassungen",
  48. SEARCH_PROVIDER: "qsirch",
  49. })
  50. ).toThrow(
  51. /QSIRCH_BASE_URL|QSIRCH_ACCOUNT|QSIRCH_PASSWORD|QSIRCH_PATH_PREFIX/i
  52. );
  53. });
  54. it("accepts a valid qsirch configuration", () => {
  55. expect(() =>
  56. validateEnv({
  57. MONGODB_URI: "mongodb://localhost:27017/rhl",
  58. SESSION_SECRET: validSecret(),
  59. NAS_ROOT_PATH: "/mnt/niederlassungen",
  60. SEARCH_PROVIDER: "qsirch",
  61. QSIRCH_BASE_URL: "http://192.168.0.22:8080",
  62. QSIRCH_ACCOUNT: "rhl_search",
  63. QSIRCH_PASSWORD: "super-secret",
  64. QSIRCH_PATH_PREFIX: "/Niederlassungen",
  65. QSIRCH_DATE_FIELD: "modified",
  66. QSIRCH_MODE: "sync",
  67. })
  68. ).not.toThrow();
  69. });
  70. });