import test from 'node:test'; import assert from 'node:assert/strict'; import { hashPassword, verifyPassword } from '../src/auth.mjs'; import { openDb, createUser, findUserByUsername, listUsers, ensureDefaultAdmin } from '../src/db.mjs'; test('hashPassword/verifyPassword aceita a senha certa e rejeita a errada', () => { const stored = hashPassword('minhaSenha123'); assert.ok(verifyPassword('minhaSenha123', stored)); assert.ok(!verifyPassword('senhaErrada', stored)); }); test('hashPassword gera salt diferente a cada chamada (hashes distintos p/ mesma senha)', () => { assert.notEqual(hashPassword('abc'), hashPassword('abc')); }); test('ensureDefaultAdmin cria admin/admin somente no primeiro acesso', () => { const db = openDb(':memory:'); ensureDefaultAdmin(db); const admin = findUserByUsername(db, 'admin'); assert.ok(admin); assert.equal(admin.role, 'admin'); assert.ok(verifyPassword('admin', admin.password_hash)); createUser(db, { username: 'vendedor1', passwordHash: hashPassword('123456'), role: 'comercial' }); ensureDefaultAdmin(db); // nao deve recriar nem duplicar assert.equal(listUsers(db).length, 2); db.close(); }); test('createUser rejeita username duplicado (constraint UNIQUE)', () => { const db = openDb(':memory:'); createUser(db, { username: 'joao', passwordHash: hashPassword('123456'), role: 'comercial' }); assert.throws(() => createUser(db, { username: 'joao', passwordHash: hashPassword('outra'), role: 'admin' })); db.close(); });