From ea0988e2f9787a339b81640069459b3d4d496994 Mon Sep 17 00:00:00 2001 From: William Valentin Date: Tue, 17 Feb 2026 09:39:26 -0800 Subject: [PATCH] fix(backends): validate backends.default and enabled backend set --- src/daemon/index.test.ts | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/daemon/index.test.ts b/src/daemon/index.test.ts index 4dd027b..f4099b1 100644 --- a/src/daemon/index.test.ts +++ b/src/daemon/index.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { configSchema } from '../config/schema.js'; -import { createConfiguredExternalBackend, createConfiguredExternalBackends } from './index.js'; +import { createConfiguredExternalBackend, createConfiguredExternalBackends, validateBackendConfig } from './index.js'; describe('createConfiguredExternalBackend', () => { const base = configSchema.parse({ @@ -69,3 +69,38 @@ describe('createConfiguredExternalBackend', () => { expect(configured.backends.gemini?.name).toBe('gemini'); }); }); + +describe('validateBackendConfig', () => { + const base = configSchema.parse({ + telegram: { bot_token: 'test', allowed_chat_ids: [1] }, + models: { default: { provider: 'anthropic', model: 'claude-3' } }, + }); + + it('throws when no backend is enabled', () => { + const cfg = { + ...base, + backends: { + ...base.backends, + native: { enabled: false }, + codex: { ...base.backends.codex, enabled: false }, + claude_code: { ...base.backends.claude_code, enabled: false }, + opencode: { ...base.backends.opencode, enabled: false }, + gemini: { ...base.backends.gemini, enabled: false }, + }, + }; + expect(() => validateBackendConfig(cfg)).toThrow('No backend enabled'); + }); + + it('throws when backends.default points to a disabled backend', () => { + const cfg = { + ...base, + backends: { + ...base.backends, + default: 'gemini' as const, + codex: { ...base.backends.codex, enabled: true }, + gemini: { ...base.backends.gemini, enabled: false }, + }, + }; + expect(() => validateBackendConfig(cfg)).toThrow('backends.default=gemini is not enabled'); + }); +});