takt/src/__tests__/opencode-config.test.ts
nrs dec77e069e
add-model-to-persona-providers (#324)
* takt: add-model-to-persona-providers

* refactor: loadConfigを廃止しresolveConfigValueにキー単位解決を一元化

loadConfig()による一括マージを廃止し、resolveConfigValue()でキーごとに
global/project/piece/envの優先順位を宣言的に解決する方式に移行。
providerOptionsの優先順位をglobal < piece < project < envに修正し、
sourceトラッキングでOptionsBuilderのマージ方向を制御する。
2026-02-20 11:12:46 +09:00

71 lines
2.2 KiB
TypeScript

/**
* Tests for OpenCode integration in schemas and global config
*/
import { describe, it, expect } from 'vitest';
import {
GlobalConfigSchema,
ProjectConfigSchema,
CustomAgentConfigSchema,
PieceMovementRawSchema,
ParallelSubMovementRawSchema,
} from '../core/models/index.js';
describe('Schemas accept opencode provider', () => {
it('should accept opencode in GlobalConfigSchema provider field', () => {
const result = GlobalConfigSchema.parse({ provider: 'opencode' });
expect(result.provider).toBe('opencode');
});
it('should accept opencode in GlobalConfigSchema persona_providers field', () => {
const result = GlobalConfigSchema.parse({
persona_providers: { coder: { provider: 'opencode' } },
});
expect(result.persona_providers).toEqual({ coder: { provider: 'opencode' } });
});
it('should accept opencode_api_key in GlobalConfigSchema', () => {
const result = GlobalConfigSchema.parse({
opencode_api_key: 'test-key-123',
});
expect(result.opencode_api_key).toBe('test-key-123');
});
it('should accept opencode in ProjectConfigSchema', () => {
const result = ProjectConfigSchema.parse({ provider: 'opencode' });
expect(result.provider).toBe('opencode');
});
it('should accept opencode in CustomAgentConfigSchema', () => {
const result = CustomAgentConfigSchema.parse({
name: 'test',
prompt: 'You are a test agent',
provider: 'opencode',
});
expect(result.provider).toBe('opencode');
});
it('should accept opencode in PieceMovementRawSchema', () => {
const result = PieceMovementRawSchema.parse({
name: 'test-movement',
provider: 'opencode',
});
expect(result.provider).toBe('opencode');
});
it('should accept opencode in ParallelSubMovementRawSchema', () => {
const result = ParallelSubMovementRawSchema.parse({
name: 'sub-1',
provider: 'opencode',
});
expect(result.provider).toBe('opencode');
});
it('should still accept existing providers (claude, codex, mock)', () => {
for (const provider of ['claude', 'codex', 'mock']) {
const result = GlobalConfigSchema.parse({ provider });
expect(result.provider).toBe(provider);
}
});
});