47 lines
1.8 KiB
TypeScript
47 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, RemoteError } from '../src/cli/remoteClient.js';
|
|
import { createProgram } from '../src/cli/index.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 via CLI and reads it back', async () => {
|
|
const program = createProgram(cwd);
|
|
await program.parseAsync(['node', 'agenthub', '--server', server.url, 'task', 'create', '--title', 'Remote CLI', '--role', 'implementer']);
|
|
|
|
const { task } = await remoteClient.getTask(server.url, 'TSK-0001');
|
|
expect(task.title).toBe('Remote CLI');
|
|
});
|
|
|
|
it('updates status remotely via CLI', async () => {
|
|
await remoteClient.createTask(server.url, { title: 'Remote', role: 'implementer' });
|
|
|
|
const program = createProgram(cwd);
|
|
await program.parseAsync(['node', 'agenthub', '--server', server.url, 'status', '--update']);
|
|
|
|
const status = await remoteClient.getStatus(server.url);
|
|
expect(status).toContain('Active tasks: 1');
|
|
});
|
|
|
|
it('returns a meaningful error when the server is unreachable', async () => {
|
|
await expect(remoteClient.listTasks('http://127.0.0.1:1')).rejects.toThrow(RemoteError);
|
|
});
|
|
});
|