- Add type guard (typeof parsed === 'object' && 'llm_routing' in parsed) before accessing llm_routing - Replace silent catch with log.warn for parse failures - Add 8 unit tests covering valid/invalid/null/malformed inputs
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
|
|
/**
|
|
* Pure function test: adminRouting parsing logic
|
|
* Core parsing logic extracted from connectionStore.ts
|
|
*/
|
|
function parseAdminRouting(raw: string | null): 'relay' | 'local' | null {
|
|
if (!raw) return null;
|
|
try {
|
|
const parsed = JSON.parse(raw);
|
|
if (parsed && typeof parsed === 'object' && 'llm_routing' in parsed) {
|
|
const routing = parsed.llm_routing;
|
|
if (routing === 'relay' || routing === 'local') return routing;
|
|
}
|
|
return null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
describe('parseAdminRouting', () => {
|
|
it('returns "relay" for valid relay config', () => {
|
|
expect(parseAdminRouting('{"llm_routing":"relay"}')).toBe('relay');
|
|
});
|
|
|
|
it('returns "local" for valid local config', () => {
|
|
expect(parseAdminRouting('{"llm_routing":"local"}')).toBe('local');
|
|
});
|
|
|
|
it('returns null for null input', () => {
|
|
expect(parseAdminRouting(null)).toBeNull();
|
|
});
|
|
|
|
it('returns null for empty string', () => {
|
|
expect(parseAdminRouting('')).toBeNull();
|
|
});
|
|
|
|
it('returns null for malformed JSON', () => {
|
|
expect(parseAdminRouting('{not json}')).toBeNull();
|
|
});
|
|
|
|
it('returns null for missing llm_routing field', () => {
|
|
expect(parseAdminRouting('{"name":"test"}')).toBeNull();
|
|
});
|
|
|
|
it('returns null for invalid routing value', () => {
|
|
expect(parseAdminRouting('{"llm_routing":"invalid"}')).toBeNull();
|
|
});
|
|
|
|
it('returns null for number routing value', () => {
|
|
expect(parseAdminRouting('{"llm_routing":123}')).toBeNull();
|
|
});
|
|
});
|