import { describe, it, expect, beforeEach } from 'vitest'; import { resetDb } from '../helpers/db.js'; import { migrateUp } from '../../lib/db/migrate.js'; import * as agents from '../../lib/db/repos/agents.js'; import * as pending from '../../lib/db/repos/pending_changes.js'; const owner = { kind: 'user', id: null }; beforeEach(async () => { await resetDb(); await migrateUp(); }); describe('pending changes', () => { it('creates and resolves a pending change', async () => { const a = await agents.create({ slug: 'mercy', name: 'Mercy', kind: 'claude' }, owner); const p = await pending.create({ agent_id: a.id, entity_type: 'page', action: 'create', payload: { title: 'draft', body_md: 'hi' }, reason: 'inferred from chat' }); expect(p.status).toBe('pending'); const resolved = await pending.resolve(p.id, 'approved', 'owner'); expect(resolved.status).toBe('approved'); }); it('listPending returns only pending rows', async () => { const a = await agents.create({ slug: 'mercy', name: 'Mercy', kind: 'claude' }, owner); const p1 = await pending.create({ agent_id: a.id, entity_type: 'page', action: 'create', payload: { title: 'a' } }); await pending.create({ agent_id: a.id, entity_type: 'page', action: 'create', payload: { title: 'b' } }); await pending.resolve(p1.id, 'rejected', 'owner'); const pendingRows = await pending.listPending(); expect(pendingRows).toHaveLength(1); }); });