import { describe, it, expect, beforeEach, afterEach } from 'vitest'; import { mkdtempSync, rmSync } from 'fs'; import { tmpdir } from 'os'; import { join } from 'path'; import { createTask, listTasks, getTask, claimTask, doneTask } from '../src/core/services/taskService.js'; describe('taskService', () => { let cwd: string; beforeEach(() => { cwd = mkdtempSync(join(tmpdir(), 'ah-task-')); }); afterEach(() => { rmSync(cwd, { recursive: true, force: true }); }); it('creates a task', () => { const task = createTask(cwd, { title: 'Test', role: 'implementer' }); expect(task.id).toBe('TSK-0001'); expect(task.title).toBe('Test'); expect(task.status).toBe('open'); }); it('lists tasks', () => { createTask(cwd, { title: 'A', role: 'implementer' }); expect(listTasks(cwd)).toHaveLength(1); }); it('claims and completes a task', () => { const task = createTask(cwd, { title: 'B', role: 'implementer' }); const claimed = claimTask(cwd, task.id, 'codex'); expect(claimed.status).toBe('in_progress'); expect(claimed.assignedTo).toBe('codex'); const done = doneTask(cwd, task.id); expect(done.status).toBe('done'); }); });