Files
openchamber/packages/ui/src/sync/session-error-log.test.ts
T

33 lines
1.6 KiB
TypeScript
Raw Normal View History

import { describe, expect, test } from 'bun:test';
import { getRecentSessionErrors, recordSessionError, summarizeOpenCodeError } from './session-error-log';
describe('summarizeOpenCodeError', () => {
test('reads the OpenCode shape: name plus data.message', () => {
expect(summarizeOpenCodeError({ name: 'ProviderAuthError', data: { providerID: 'openai', message: 'Invalid API key' } }))
.toEqual({ name: 'ProviderAuthError', message: 'Invalid API key' });
});
test('falls back to a top-level message and reports missing details as null', () => {
expect(summarizeOpenCodeError({ message: 'socket hang up' })).toEqual({ name: null, message: 'socket hang up' });
expect(summarizeOpenCodeError({ name: 'UnknownError', data: { message: ' ' } })).toEqual({ name: 'UnknownError', message: null });
expect(summarizeOpenCodeError(undefined)).toEqual({ name: null, message: null });
});
test('bounds the message length', () => {
const summary = summarizeOpenCodeError({ name: 'UnknownError', data: { message: 'x'.repeat(1000) } });
expect(summary.message?.length).toBe(400);
});
});
describe('recordSessionError', () => {
test('keeps the newest records first and caps the buffer', () => {
for (let index = 0; index < 25; index += 1) {
recordSessionError({ sessionId: `ses_${index}`, directory: null, name: 'UnknownError', message: `error ${index}` });
}
const records = getRecentSessionErrors();
expect(records.length).toBe(20);
expect(records[0]?.sessionId).toBe('ses_24');
expect(records[19]?.sessionId).toBe('ses_5');
});
});