test-llm-provider-selection.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { loadConfig } from './src/utils/config.js';
  2. import { resolveProviderName } from './src/core/llm-provider.js';
  3. let passed = 0;
  4. let failed = 0;
  5. function test(name, fn) {
  6. try {
  7. fn();
  8. console.log(` ✓ ${name}`);
  9. passed++;
  10. } catch (e) {
  11. console.log(` ✗ ${name}: ${e.message}`);
  12. failed++;
  13. }
  14. }
  15. function assertEqual(actual, expected, msg) {
  16. if (actual !== expected) {
  17. throw new Error(msg || `Expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`);
  18. }
  19. }
  20. console.log('\n── LLM Provider Selection ──');
  21. test('loadConfig defaults to CLI even when an API key exists', () => {
  22. const original = process.env.ANTHROPIC_API_KEY;
  23. process.env.ANTHROPIC_API_KEY = 'test-key';
  24. try {
  25. const config = loadConfig([]);
  26. assertEqual(config.llmProvider, 'cli');
  27. assertEqual(config.apiKey, 'test-key');
  28. } finally {
  29. if (original === undefined) delete process.env.ANTHROPIC_API_KEY;
  30. else process.env.ANTHROPIC_API_KEY = original;
  31. }
  32. });
  33. test('explicit CLI selection stays on CLI when available', () => {
  34. assertEqual(resolveProviderName({ llmProvider: 'cli', cliAvailable: true, apiKey: 'test-key' }), 'cli');
  35. });
  36. test('CLI selection falls back to API key when CLI is unavailable', () => {
  37. assertEqual(resolveProviderName({ llmProvider: 'cli', cliAvailable: false, apiKey: 'test-key' }), 'api-key');
  38. });
  39. test('API Key selection stays on API key when configured', () => {
  40. assertEqual(resolveProviderName({ llmProvider: 'api-key', cliAvailable: true, apiKey: 'test-key' }), 'api-key');
  41. });
  42. console.log(`\n── Results ──\n\n ${passed} passed, ${failed} failed\n`);
  43. process.exit(failed > 0 ? 1 : 0);