diff --git a/__tests__/lib/auth-guard.test.ts b/__tests__/lib/auth-guard.test.ts index b162921..552c1cb 100644 --- a/__tests__/lib/auth-guard.test.ts +++ b/__tests__/lib/auth-guard.test.ts @@ -8,6 +8,41 @@ vi.mock('@/lib/auth', () => ({ getSession: getSessionMock })) vi.mock('@/lib/auth/pairing', () => ({ isPairedSessionExpired: isPairedSessionExpiredMock })) vi.mock('next/navigation', () => ({ redirect: redirectMock })) +describe('requireAdmin', () => { + beforeEach(() => { + getSessionMock.mockReset() + isPairedSessionExpiredMock.mockReset() + redirectMock.mockClear() + }) + + afterEach(() => { + vi.resetModules() + }) + + it('redirect /dashboard als userId ontbreekt', async () => { + getSessionMock.mockResolvedValue({ userId: undefined, isAdmin: false }) + const { requireAdmin } = await import('@/lib/auth-guard') + await expect(requireAdmin()).rejects.toThrow('REDIRECT_CALLED') + expect(redirectMock).toHaveBeenCalledWith('/dashboard') + }) + + it('redirect /dashboard als isAdmin false is', async () => { + getSessionMock.mockResolvedValue({ userId: 'u1', isAdmin: false }) + const { requireAdmin } = await import('@/lib/auth-guard') + await expect(requireAdmin()).rejects.toThrow('REDIRECT_CALLED') + expect(redirectMock).toHaveBeenCalledWith('/dashboard') + }) + + it('geeft sessie terug als isAdmin true is', async () => { + const sess = { userId: 'u1', isAdmin: true } + getSessionMock.mockResolvedValue(sess) + const { requireAdmin } = await import('@/lib/auth-guard') + const result = await requireAdmin() + expect(result).toBe(sess) + expect(redirectMock).not.toHaveBeenCalled() + }) +}) + describe('requireSession', () => { beforeEach(() => { getSessionMock.mockReset() diff --git a/app/(app)/admin/layout.tsx b/app/(app)/admin/layout.tsx new file mode 100644 index 0000000..0d1d279 --- /dev/null +++ b/app/(app)/admin/layout.tsx @@ -0,0 +1,16 @@ +import { requireAdmin } from '@/lib/auth-guard' +import Link from 'next/link' + +export default async function AdminLayout({ children }: { children: React.ReactNode }) { + await requireAdmin() + return ( +