import { describe, it, expect, beforeEach } from 'vitest'; import Database from 'better-sqlite3'; import { runMigrations } from '@main/db/migrations/index.js'; import { NoteRepository } from '@main/repository/NoteRepository.js'; import { IntentService } from '@main/services/IntentService.js'; describe('IntentService', () => { let db: Database.Database; let repo: NoteRepository; let svc: IntentService; beforeEach(() => { db = new Database(':memory:'); runMigrations(db); repo = new NoteRepository(db); svc = new IntentService(repo); }); it('setIntent stores text on note', () => { const { id } = repo.create({ rawText: 'x' }); svc.setIntent(id, '내일의 나에게'); expect(repo.findById(id)?.userIntent).toBe('내일의 나에게'); }); it('dismissIntent stamps prompted_at without setting intent', () => { const { id } = repo.create({ rawText: 'x' }); svc.dismissIntent(id); const note = repo.findById(id)!; expect(note.userIntent).toBeNull(); expect(note.intentPromptedAt).not.toBeNull(); }); it('rejects empty intent text', () => { const { id } = repo.create({ rawText: 'x' }); expect(() => svc.setIntent(id, ' ')).toThrow(/empty/i); }); it('throws if note does not exist', () => { expect(() => svc.setIntent('nonexistent', 'x')).toThrow(/not found/i); expect(() => svc.dismissIntent('nonexistent')).toThrow(/not found/i); }); });