takt/src/__tests__/provider-resolution.test.ts
2026-02-12 08:50:17 +09:00

81 lines
3.0 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { resolveMovementProviderModel } from '../core/piece/provider-resolution.js';
describe('resolveMovementProviderModel', () => {
it('should prefer step.provider when step provider is defined', () => {
// Given: step.provider が指定されている
const result = resolveMovementProviderModel({
step: { provider: 'codex', model: undefined, personaDisplayName: 'coder' },
provider: 'claude',
personaProviders: { coder: 'opencode' },
});
// When: provider/model を解決する
// Then: step.provider が最優先になる
expect(result.provider).toBe('codex');
});
it('should use personaProviders when step.provider is undefined', () => {
// Given: step.provider が未定義で personaProviders に対応がある
const result = resolveMovementProviderModel({
step: { provider: undefined, model: undefined, personaDisplayName: 'reviewer' },
provider: 'claude',
personaProviders: { reviewer: 'opencode' },
});
// When: provider/model を解決する
// Then: personaProviders の値が使われる
expect(result.provider).toBe('opencode');
});
it('should fallback to input.provider when persona mapping is missing', () => {
// Given: step.provider 未定義かつ persona マッピングが存在しない
const result = resolveMovementProviderModel({
step: { provider: undefined, model: undefined, personaDisplayName: 'unknown' },
provider: 'mock',
personaProviders: { reviewer: 'codex' },
});
// When: provider/model を解決する
// Then: input.provider が使われる
expect(result.provider).toBe('mock');
});
it('should return undefined provider when all provider candidates are missing', () => {
// Given: provider の候補がすべて未定義
const result = resolveMovementProviderModel({
step: { provider: undefined, model: undefined, personaDisplayName: 'none' },
provider: undefined,
personaProviders: undefined,
});
// When: provider/model を解決する
// Then: provider は undefined になる
expect(result.provider).toBeUndefined();
});
it('should prefer step.model over input.model', () => {
// Given: step.model と input.model が両方指定されている
const result = resolveMovementProviderModel({
step: { provider: undefined, model: 'step-model', personaDisplayName: 'coder' },
model: 'input-model',
});
// When: provider/model を解決する
// Then: step.model が最優先になる
expect(result.model).toBe('step-model');
});
it('should fallback to input.model when step.model is undefined', () => {
// Given: step.model が未定義で input.model が指定されている
const result = resolveMovementProviderModel({
step: { provider: undefined, model: undefined, personaDisplayName: 'coder' },
model: 'input-model',
});
// When: provider/model を解決する
// Then: input.model が使われる
expect(result.model).toBe('input-model');
});
});