import { describe, it, expect, beforeEach } from 'vitest'; import { initDb } from '../../src/db/schema.ts'; import { createUser, getUserByUsername, getUserById } from '../../src/db/users.ts'; import type Database from 'better-sqlite3'; describe('db/users', () => { let db: Database.Database; beforeEach(() => { db = initDb(':memory:'); }); it('creates a user and retrieves by username', () => { const user = createUser(db, { username: 'alice', passwordHash: 'hash123' }); expect(user.id).toBeTypeOf('number'); expect(user.username).toBe('alice'); expect(user.password_hash).toBe('hash123'); expect(user.created_at).toBeTruthy(); const found = getUserByUsername(db, 'alice'); expect(found).toEqual(user); }); it('returns undefined for unknown username', () => { expect(getUserByUsername(db, 'ghost')).toBeUndefined(); }); it('retrieves user by id', () => { const user = createUser(db, { username: 'bob', passwordHash: 'hash456' }); const found = getUserById(db, user.id); expect(found).toEqual(user); }); it('returns undefined for unknown id', () => { expect(getUserById(db, 999)).toBeUndefined(); }); it('enforces unique username constraint', () => { createUser(db, { username: 'carol', passwordHash: 'hash' }); expect(() => createUser(db, { username: 'carol', passwordHash: 'other' })).toThrow(); }); });