branchUiDecision.test.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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/dev when branch is not in allowedBranches", () => {
  18. const admin = { userId: "u2", role: "admin", branchId: null };
  19. expect(
  20. decideBranchUi({
  21. user: admin,
  22. branch: "NL200",
  23. allowedBranches: ["NL01", "NL02"],
  24. })
  25. ).toBe(BRANCH_UI_DECISION.NOT_FOUND);
  26. });
  27. it("fails open (ALLOWED) for admin/dev when allowedBranches is not available", () => {
  28. const admin = { userId: "u2", role: "admin", branchId: null };
  29. expect(decideBranchUi({ user: admin, branch: "NL200" })).toBe(
  30. BRANCH_UI_DECISION.ALLOWED
  31. );
  32. });
  33. });