Files
Claude-Code-Workflow/test-e2e-model-alias.js
catlog22 01459a34a5 Add tests for CLI command generation and model alias resolution
- Implement `test-cli-command-gen.js` to verify the logic of `buildCliCommand` function.
- Create `test-e2e-model-alias.js` for end-to-end testing of model alias resolution in `ccw cli`.
- Add `test-model-alias.js` to test model alias resolution for different models.
- Introduce `test-model-alias.txt` for prompt testing with model alias.
- Develop `test-update-claude-command.js` to test command generation for `update_module_claude`.
- Create a test file in `test-update-claude/src` for future tests.
2026-02-05 20:17:10 +08:00

76 lines
3.2 KiB
JavaScript

/**
* End-to-end test: Model alias resolution in ccw cli
*/
import { resolveModelAlias, getPrimaryModel, getSecondaryModel } from './ccw/dist/tools/cli-executor-core.js';
import { getPrimaryModel as getConfigPrimaryModel, getSecondaryModel as getConfigSecondaryModel } from './ccw/dist/tools/claude-cli-tools.js';
const testDir = process.cwd();
console.log('\n=== End-to-End Model Alias Test ===\n');
// Test resolveModelAlias function (this is what ccw cli uses internally)
console.log('Testing resolveModelAlias function:\n');
// Test 1: PRIMARY_MODEL for gemini
const result1 = resolveModelAlias('PRIMARY_MODEL', 'gemini', testDir);
const expected1 = getConfigPrimaryModel(testDir, 'gemini');
console.log('Test 1: PRIMARY_MODEL for gemini');
console.log(` Input: 'PRIMARY_MODEL'`);
console.log(` Resolved: ${result1}`);
console.log(` Expected: ${expected1}`);
console.log(` ✓ Match: ${result1 === expected1}\n`);
// Test 2: SECONDARY_MODEL for gemini
const result2 = resolveModelAlias('SECONDARY_MODEL', 'gemini', testDir);
const expected2 = getConfigSecondaryModel(testDir, 'gemini');
console.log('Test 2: SECONDARY_MODEL for gemini');
console.log(` Input: 'SECONDARY_MODEL'`);
console.log(` Resolved: ${result2}`);
console.log(` Expected: ${expected2}`);
console.log(` ✓ Match: ${result2 === expected2}\n`);
// Test 3: SECONDARY_MODEL for claude (different values)
const result3 = resolveModelAlias('SECONDARY_MODEL', 'claude', testDir);
const expected3 = getConfigSecondaryModel(testDir, 'claude');
console.log('Test 3: SECONDARY_MODEL for claude');
console.log(` Input: 'SECONDARY_MODEL'`);
console.log(` Resolved: ${result3}`);
console.log(` Expected: ${expected3}`);
console.log(` ✓ Match: ${result3 === expected3}\n`);
// Test 4: secondary_model (lowercase - should be case-insensitive)
const result4 = resolveModelAlias('secondary_model', 'codex', testDir);
const expected4 = getConfigSecondaryModel(testDir, 'codex');
console.log('Test 4: secondary_model (lowercase) for codex');
console.log(` Input: 'secondary_model'`);
console.log(` Resolved: ${result4}`);
console.log(` Expected: ${expected4}`);
console.log(` ✓ Match: ${result4 === expected4}\n`);
// Test 5: Explicit model (should pass through unchanged)
const result5 = resolveModelAlias('custom-model-123', 'gemini', testDir);
console.log('Test 5: Explicit model name (not an alias)');
console.log(` Input: 'custom-model-123'`);
console.log(` Resolved: ${result5}`);
console.log(` Expected: 'custom-model-123'`);
console.log(` ✓ Match: ${result5 === 'custom-model-123'}\n`);
// Test 6: Undefined model (should return undefined)
const result6 = resolveModelAlias(undefined, 'gemini', testDir);
console.log('Test 6: Undefined model');
console.log(` Input: undefined`);
console.log(` Resolved: ${result6}`);
console.log(` Expected: undefined`);
console.log(` ✓ Match: ${result6 === undefined}\n`);
// Summary
console.log('Summary:');
console.log(' ✓ PRIMARY_MODEL alias works');
console.log(' ✓ SECONDARY_MODEL alias works');
console.log(' ✓ Case-insensitive matching works');
console.log(' ✓ Explicit model names pass through');
console.log(' ✓ Undefined handling works correctly');
console.log('\n✅ All end-to-end tests passed!');
console.log('\n=== Test Complete ===\n');