Files
flynn/src/cli/setup/providers.test.ts
T
2026-02-10 09:31:43 -08:00

65 lines
2.0 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { createInterface } from 'readline/promises';
import { EventEmitter } from 'events';
import { createPrompter } from './prompts.js';
import { ConfigBuilder } from './config.js';
import { setupProviders } from './providers.js';
function mockReadline(inputs: string[]) {
let questionIdx = 0;
const emitter = new EventEmitter();
return {
async question(query: string) {
const answer = inputs[questionIdx++];
return answer ?? '';
},
close() {
// no-op
},
[Symbol.asyncIterator]() {
return this;
},
async next() {
return { done: true };
},
} as any;
}
describe('setupProviders', () => {
it('configures anthropic as default provider', async () => {
const rl = mockReadline(['1', 'sk-ant-test123', '', 'n']);
const p = createPrompter(rl);
const builder = new ConfigBuilder();
await setupProviders(p, builder);
const config = builder.build();
expect(config.models.default.provider).toBe('anthropic');
expect(config.models.default.api_key).toBe('sk-ant-test123');
expect(config.models.default.model).toBe('claude-sonnet-4-20250514');
});
it('configures ollama as default provider', async () => {
const rl = mockReadline(['3', '', '', 'n']);
const p = createPrompter(rl);
const builder = new ConfigBuilder();
await setupProviders(p, builder);
const config = builder.build();
expect(config.models.default.provider).toBe('ollama');
expect(config.models.default.endpoint).toBe('http://localhost:11434');
});
it('configures anthropic with fast tier', async () => {
const rl = mockReadline(['1', 'sk-ant-test123', '', 'y', '']);
const p = createPrompter(rl);
const builder = new ConfigBuilder();
await setupProviders(p, builder);
const config = builder.build();
expect(config.models.default.provider).toBe('anthropic');
expect(config.models.fast).toBeDefined();
expect(config.models.fast.provider).toBe('anthropic');
});
});