branchUiDecision.test.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /* @vitest-environment node */
  2. import { describe, it, expect } from "vitest";
  3. import { decideBranchUi, BRANCH_UI_DECISION } from "./branchUiDecision.js";
  4. describe("lib/frontend/rbac/branchUiDecision", () => {
  5. it("returns FORBIDDEN for branch users accessing other branches", () => {
  6. const user = { userId: "u1", role: "branch", branchId: "NL01" };
  7. expect(decideBranchUi({ user, branch: "NL02" })).toBe(
  8. BRANCH_UI_DECISION.FORBIDDEN,
  9. );
  10. });
  11. it("returns ALLOWED for branch users accessing their own branch", () => {
  12. const user = { userId: "u1", role: "branch", branchId: "NL01" };
  13. expect(decideBranchUi({ user, branch: "NL01" })).toBe(
  14. BRANCH_UI_DECISION.ALLOWED,
  15. );
  16. });
  17. it("returns NOT_FOUND for admin-like users when branch is not in allowedBranches", () => {
  18. const admin = { userId: "u2", role: "admin", branchId: null };
  19. const superadmin = { userId: "u3", role: "superadmin", branchId: null };
  20. const dev = { userId: "u4", role: "dev", branchId: null };
  21. expect(
  22. decideBranchUi({
  23. user: admin,
  24. branch: "NL200",
  25. allowedBranches: ["NL01", "NL02"],
  26. }),
  27. ).toBe(BRANCH_UI_DECISION.NOT_FOUND);
  28. expect(
  29. decideBranchUi({
  30. user: superadmin,
  31. branch: "NL200",
  32. allowedBranches: ["NL01", "NL02"],
  33. }),
  34. ).toBe(BRANCH_UI_DECISION.NOT_FOUND);
  35. expect(
  36. decideBranchUi({
  37. user: dev,
  38. branch: "NL200",
  39. allowedBranches: ["NL01", "NL02"],
  40. }),
  41. ).toBe(BRANCH_UI_DECISION.NOT_FOUND);
  42. });
  43. it("fails open (ALLOWED) for admin-like users when allowedBranches is not available", () => {
  44. const admin = { userId: "u2", role: "admin", branchId: null };
  45. const superadmin = { userId: "u3", role: "superadmin", branchId: null };
  46. expect(decideBranchUi({ user: admin, branch: "NL200" })).toBe(
  47. BRANCH_UI_DECISION.ALLOWED,
  48. );
  49. expect(decideBranchUi({ user: superadmin, branch: "NL200" })).toBe(
  50. BRANCH_UI_DECISION.ALLOWED,
  51. );
  52. });
  53. });