Jesse Daniel Brown
Add RBAC and consent API tests
349d99b
Raw History Blame Contribute Delete
1.39 kB
import { Role } from "@prisma/client";
import type { Session } from "next-auth";
import { describe, expect, it } from "vitest";
import { requireRole } from "./rbac";
describe("requireRole", () => {
const baseSession = {
user: {
id: "user-1",
email: "user@example.com",
orgId: "org-1",
role: Role.ADMIN,
name: "Usuário teste",
},
expires: new Date(Date.now() + 60_000).toISOString(),
} satisfies Session;
it("permite acesso quando o papel é autorizado", () => {
expect(requireRole(baseSession, [Role.ADMIN, Role.TEACHER])).toBe(true);
});
it("lança erro quando não há sessão ativa", () => {
expect(() => requireRole(null, [Role.ADMIN])).toThrow(
"Usuário sem sessão ativa."
);
});
it("lança erro quando o usuário não tem role definida", () => {
const sessionWithoutRole: Session = {
...baseSession,
user: { ...baseSession.user, role: null },
} as Session;
expect(() => requireRole(sessionWithoutRole, [Role.ADMIN])).toThrow(
"Usuário sem sessão ativa."
);
});
it("bloqueia perfis sem permissão", () => {
const teacherSession: Session = {
...baseSession,
user: { ...baseSession.user, role: Role.TEACHER },
};
expect(() => requireRole(teacherSession, [Role.ADMIN])).toThrow(
"Acesso negado para este perfil."
);
});
});