build(trial): preserve deployed source for knowledge refresh
This commit is contained in:
1 parent
8e0e52f30e
commit
2d4e44f4a0
42 files changed
+2321
-283
No files matched your search
@@ -2,11 +2,13 @@ import type { IncomingMessage, ServerResponse } from 'node:http';
|
||||
import { Readable } from 'node:stream';
|
||||
import { beforeEach, expect, it, vi } from 'vitest';
|
||||
import { handleCloudAgentsRoutes } from '@electron/api/routes/cloud-agents';
|
||||
import { CloudAgentsError } from '@electron/services/cloud-agents';
|
||||
|
||||
const service = vi.hoisted(() => ({ useAvatarPreset: vi.fn(), uploadAvatar: vi.fn() }));
|
||||
const service = vi.hoisted(() => ({ useAvatarPreset: vi.fn(), uploadAvatar: vi.fn(), create: vi.fn() }));
|
||||
vi.mock('@electron/services/cloud-agents', () => ({
|
||||
CloudAgentsModule: class { useAvatarPreset = service.useAvatarPreset; uploadAvatar = service.uploadAvatar; },
|
||||
CloudAgentsError: class extends Error { constructor(readonly status: number, readonly code: string) { super(code); } },
|
||||
CloudAgentsModule: class { useAvatarPreset = service.useAvatarPreset; uploadAvatar = service.uploadAvatar; create = service.create; },
|
||||
CloudAgentsError: class extends Error { constructor(readonly status: number, readonly code: string,
|
||||
readonly commandOutcome = 'unknown') { super(code); } },
|
||||
}));
|
||||
|
||||
beforeEach(() => vi.resetAllMocks());
|
||||
@@ -35,3 +37,20 @@ it('keeps the existing file picker route and rejects malformed preset JSON', asy
|
||||
expect(service.useAvatarPreset).not.toHaveBeenCalled();
|
||||
expect((await call('/avatars/preset', undefined, 'GET')).status).toBe(404);
|
||||
});
|
||||
|
||||
it.each(['definitive_failure', 'unknown'] as const)('preserves creation outcome %s across the Host API', async outcome => {
|
||||
service.create.mockRejectedValue(new CloudAgentsError(422, 'invalid_input', outcome));
|
||||
expect(await call('/agents', JSON.stringify({ name: 'test' }))).toEqual({
|
||||
handled: true, status: 422,
|
||||
body: { success: false, error: 'invalid_input', code: 'invalid_input', commandOutcome: outcome },
|
||||
});
|
||||
});
|
||||
|
||||
it('marks malformed creation JSON as rejected and unexpected failures as uncertain', async () => {
|
||||
expect((await call('/agents', '{')).body.commandOutcome).toBe('definitive_failure');
|
||||
expect(service.create).not.toHaveBeenCalled();
|
||||
service.create.mockRejectedValue(new Error('private internal error'));
|
||||
const result = await call('/agents', '{}');
|
||||
expect(result).toMatchObject({ status: 502, body: { code: 'cloud_service_unavailable', commandOutcome: 'unknown' } });
|
||||
expect(result.body.error).not.toContain('private');
|
||||
});
|
||||
Reference in new issue
Block a user