Files
makelore/tests/unit/host-api-proxy.test.ts
brother7 e97a7ce9df feat: 增加共享 Agent Browser 调试能力
需求:在 AI 编程会话中让用户与 Agent 共享同一浏览器页面,并查看控制台与网络信息。

实现:新增沙箱浏览器内核、Host API/渲染器面板、OpenCode 工具接入及安全边界测试。
2026-07-31 14:53:36 +08:00

65 lines
1.9 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest';
const handleMock = vi.fn();
vi.mock('electron', () => ({
ipcMain: { handle: handleMock },
}));
vi.mock('../../electron/utils/config', () => ({
getPort: () => 13210,
}));
vi.mock('../../electron/api/server', () => ({
getHostApiToken: () => 'host-token',
}));
vi.mock('../../electron/api/renderer-capability', () => ({
getRendererCapability: () => 'renderer-token',
RENDERER_CAPABILITY_HEADER: 'x-niancode-renderer-capability',
}));
describe('Host API IPC proxy', () => {
beforeEach(() => {
vi.resetModules();
vi.clearAllMocks();
vi.unstubAllGlobals();
});
it('connects to the loopback Host API with direct fetch', async () => {
const fetchMock = vi.fn().mockResolvedValue(new Response(
JSON.stringify({ success: true }),
{ status: 200, headers: { 'content-type': 'application/json' } },
));
vi.stubGlobal('fetch', fetchMock);
const { registerHostApiProxyHandlers } = await import('../../electron/main/ipc/host-api-proxy');
registerHostApiProxyHandlers();
const fetchHandler = handleMock.mock.calls.find(([channel]) => channel === 'hostapi:fetch')?.[1];
expect(fetchHandler).toBeTypeOf('function');
const result = await fetchHandler(undefined, {
path: '/api/opencode/projects/create',
method: 'POST',
body: JSON.stringify({ projectName: '测试项目' }),
});
expect(fetchMock).toHaveBeenCalledWith(
'http://127.0.0.1:13210/api/opencode/projects/create',
expect.objectContaining({
method: 'POST',
headers: expect.objectContaining({
Authorization: 'Bearer host-token',
'Content-Type': 'application/json',
'x-niancode-renderer-capability': 'renderer-token',
}),
}),
);
expect(result).toEqual({
ok: true,
data: { status: 200, ok: true, json: { success: true } },
});
});
});