50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import { describe, it, expect, beforeEach } from 'vitest';
|
||
import type Database from 'better-sqlite3';
|
||
import { createDb } from '../src/lib/db';
|
||
import {
|
||
createUser, countAdmins, getUserById, updateUserRole,
|
||
updateUserPassword, deleteUser, randomPassword, isRole, hashPassword, verifyPassword,
|
||
} from '../src/lib/auth';
|
||
|
||
let db: Database.Database;
|
||
beforeEach(() => { db = createDb(':memory:'); });
|
||
|
||
describe('gestione utenti', () => {
|
||
it('countAdmins conta i soli admin', () => {
|
||
createUser(db, 'a1', 'segreta123', 'admin');
|
||
createUser(db, 's1', 'segreta123', 'superuser');
|
||
expect(countAdmins(db)).toBe(1);
|
||
});
|
||
|
||
it('updateUserRole e getUserById', () => {
|
||
const id = createUser(db, 'u1', 'segreta123', 'user');
|
||
updateUserRole(db, id, 'superuser');
|
||
expect(getUserById(db, id)!.role).toBe('superuser');
|
||
});
|
||
|
||
it('updateUserPassword cambia l’hash', () => {
|
||
const id = createUser(db, 'u2', 'vecchia123', 'user');
|
||
updateUserPassword(db, id, hashPassword('nuova12345'));
|
||
const hash = (db.prepare('SELECT password_hash AS h FROM users WHERE id = ?').get(id) as { h: string }).h;
|
||
expect(verifyPassword('nuova12345', hash)).toBe(true);
|
||
});
|
||
|
||
it('deleteUser rimuove', () => {
|
||
const id = createUser(db, 'u3', 'segreta123', 'user');
|
||
deleteUser(db, id);
|
||
expect(getUserById(db, id)).toBeNull();
|
||
});
|
||
|
||
it('randomPassword genera almeno 12 caratteri', () => {
|
||
expect(randomPassword().length).toBeGreaterThanOrEqual(12);
|
||
});
|
||
|
||
it('isRole valida i ruoli', () => {
|
||
expect(isRole('admin')).toBe(true);
|
||
expect(isRole('superuser')).toBe(true);
|
||
expect(isRole('user')).toBe(true);
|
||
expect(isRole('editor')).toBe(false);
|
||
expect(isRole(3)).toBe(false);
|
||
});
|
||
});
|