import { describe, it, expect, beforeEach } from 'vitest'; import type Database from 'better-sqlite3'; import { createDb } from '../src/lib/db'; import { createUser, login, getSessionUser, canAccessAdminPath, landingFor, isRole } from '../src/lib/auth'; let db: Database.Database; beforeEach(() => { db = createDb(':memory:'); }); describe('ruolo campus', () => { it('createUser accetta campus e getSessionUser lo ritorna', () => { createUser(db, 'c', 'segreta123', 'campus'); expect(getSessionUser(db, login(db, 'c', 'segreta123')!)).toMatchObject({ role: 'campus' }); }); it('isRole valida campus', () => { expect(isRole('campus')).toBe(true); }); it('landingFor porta campus alla sezione campus', () => { expect(landingFor('campus')).toBe('/campus'); }); }); describe('canAccessAdminPath con campus', () => { it('campus: sezione campus e logout sì, resto del pannello no', () => { expect(canAccessAdminPath('campus', '/campus')).toBe(true); expect(canAccessAdminPath('campus', '/campus/')).toBe(true); expect(canAccessAdminPath('campus', '/campus/corso-base/lezione-01')).toBe(true); expect(canAccessAdminPath('campus', '/campus/assets/slide/x.png')).toBe(true); expect(canAccessAdminPath('campus', '/admin/logout')).toBe(true); expect(canAccessAdminPath('campus', '/admin')).toBe(false); expect(canAccessAdminPath('campus', '/admin/new')).toBe(false); expect(canAccessAdminPath('campus', '/admin/content')).toBe(false); expect(canAccessAdminPath('campus', '/admin/users')).toBe(false); expect(canAccessAdminPath('campus', '/api/admin/posts')).toBe(false); expect(canAccessAdminPath('campus', '/api/admin/upload')).toBe(false); }); it('admin accede alla sezione campus', () => { expect(canAccessAdminPath('admin', '/campus')).toBe(true); expect(canAccessAdminPath('admin', '/campus/corso-base')).toBe(true); }); it('superuser e user non accedono alla sezione campus', () => { expect(canAccessAdminPath('superuser', '/campus')).toBe(false); expect(canAccessAdminPath('superuser', '/campus/corso-base')).toBe(false); expect(canAccessAdminPath('user', '/campus')).toBe(false); expect(canAccessAdminPath('user', '/campus/assets/slide/x.png')).toBe(false); }); });