agenthub/tests/e2e-network.test.ts

49 lines
1.8 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { mkdtempSync, rmSync } from 'fs';
import { tmpdir } from 'os';
import { join } from 'path';
import { startServer } from '../src/server/index.js';
import { remoteClient } from '../src/cli/remoteClient.js';
import { init } from '../src/cli/commands/init.js';
describe('network e2e', () => {
let cwd: string;
let server: Awaited<ReturnType<typeof startServer>>;
beforeEach(async () => {
cwd = mkdtempSync(join(tmpdir(), 'ah-net-'));
await init(cwd, { projectName: 'net-test', yes: true });
server = await startServer(cwd, { host: '127.0.0.1', port: 0 });
});
afterEach(async () => {
await server.app.close();
rmSync(cwd, { recursive: true, force: true });
});
it('creates a task remotely and reads it back', async () => {
const url = server.url;
const created = await remoteClient.createTask(url, { title: 'Remote', role: 'implementer' });
expect(created.id).toBe('TSK-0001');
const tasks = await remoteClient.listTasks(url);
expect(tasks).toHaveLength(1);
const { task } = await remoteClient.getTask(url, 'TSK-0001');
expect(task.title).toBe('Remote');
});
it('claims and completes a task remotely', async () => {
const url = server.url;
await remoteClient.createTask(url, { title: 'Remote', role: 'implementer' });
const claimed = await remoteClient.claimTask(url, 'TSK-0001', 'codex');
expect(claimed.status).toBe('in_progress');
const done = await remoteClient.doneTask(url, 'TSK-0001');
expect(done.status).toBe('done');
});
it('returns a meaningful error when the server is unreachable', async () => {
await expect(remoteClient.listTasks('http://127.0.0.1:1')).rejects.toThrow(/Cannot reach AgentHub server/);
});
});