Files
waggle-os/packages/server/tests/local/external-tool-roadmap.test.ts
Oleg Maslov b20b138fe4 moving
2026-09-02 10:14:22 +02:00

61 lines
2.1 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from 'vitest';
import Fastify from 'fastify';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { AgentRunRegistry } from '../../src/local/agent-run-registry.js';
import { externalToolRunRoutes } from '../../src/local/routes/external-tool-runs.js';
const tempDirs: string[] = [];
afterEach(() => {
vi.restoreAllMocks();
for (const dir of tempDirs.splice(0)) fs.rmSync(dir, { recursive: true, force: true });
});
describe('external tool roadmap gate', () => {
it('rejects OpenClaw before workspace, run, or process side effects', async () => {
const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'waggle-roadmap-tool-'));
tempDirs.push(dataDir);
const registry = new AgentRunRegistry(path.join(dataDir, 'agent-runs.json'));
const workspaceLookup = vi.fn();
const runner = vi.fn();
const server = Fastify({ logger: false });
server.decorate('agentRunRegistry', registry);
server.decorate('workspaceManager', { get: workspaceLookup } as never);
server.decorate('externalToolDetector', async () => ({
platform: 'win32',
detectedAt: new Date().toISOString(),
tools: [{
id: 'openclaw',
displayName: 'OpenClaw',
releaseStatus: 'supported',
launchable: true,
installed: true,
installedPath: 'C:\\tools\\openclaw.cmd',
version: 'test',
hooksInstalled: false,
hookPointerPath: null,
}],
}));
server.decorate('externalToolRunner', runner);
await server.register(externalToolRunRoutes);
const response = await server.inject({
method: 'POST',
url: '/api/tools/run',
payload: { toolId: 'openclaw', workspaceIds: ['alpha'], prompt: 'Do work' },
});
expect(response.statusCode).toBe(409);
expect(response.json()).toMatchObject({
error: 'tool_not_release_supported',
toolId: 'openclaw',
});
expect(workspaceLookup).not.toHaveBeenCalled();
expect(runner).not.toHaveBeenCalled();
expect(registry.snapshot().runs).toHaveLength(0);
await server.close();
});
});