#!/usr/bin/env node /** * Comprehensive test suite for all awesome-copilot functionality */ const { runTests: runUnitTests } = require('./test-effective-states'); const { runTests: runIntegrationTests } = require('./test-integration'); const { runTests: runCliTests } = require('./test-cli'); const { runTests: runApplyTests } = require('./test-apply-effective'); const { runTests: runToggleCollectionTests } = require('./test-toggle-collection'); async function runAllTests() { console.log('๐Ÿงช Running Awesome Copilot Comprehensive Test Suite\n'); console.log('='.repeat(60)); const results = { unit: false, integration: false, cli: false, apply: false, toggleCollection: false }; try { console.log('\n๐Ÿ“Š Unit Tests (Effective State Computation)'); console.log('-'.repeat(45)); results.unit = await runUnitTests(); } catch (error) { console.error('Unit tests failed with error:', error.message); } try { console.log('\n๐Ÿ”„ Integration Tests (Toggle+Apply Idempotency)'); console.log('-'.repeat(48)); results.integration = await runIntegrationTests(); } catch (error) { console.error('Integration tests failed with error:', error.message); } try { console.log('\nโŒจ๏ธ CLI Tests (List and Toggle Commands)'); console.log('-'.repeat(40)); results.cli = await runCliTests(); } catch (error) { console.error('CLI tests failed with error:', error.message); } try { console.log('\n๐ŸŽฏ Apply Tests (Effective States in Apply)'); console.log('-'.repeat(42)); results.apply = await runApplyTests(); } catch (error) { console.error('Apply tests failed with error:', error.message); } try { console.log('\n๐Ÿ”ง Toggle Collection Tests (TASK-003)'); console.log('-'.repeat(36)); results.toggleCollection = await runToggleCollectionTests(); } catch (error) { console.error('Toggle collection tests failed with error:', error.message); } try { console.log('\n๐Ÿค– Repository Instructions Tests'); console.log('-'.repeat(33)); const { runTests: runRepoInstructionsTests } = require('./test-repository-instructions'); results.repoInstructions = await runRepoInstructionsTests(); } catch (error) { console.error('Repository instructions tests failed with error:', error.message); } // Summary console.log('\n' + '='.repeat(60)); console.log('๐Ÿ“‹ Test Suite Summary'); console.log('='.repeat(60)); const testTypes = [ { name: 'Unit Tests', result: results.unit, emoji: '๐Ÿ“Š' }, { name: 'Integration Tests', result: results.integration, emoji: '๐Ÿ”„' }, { name: 'CLI Tests', result: results.cli, emoji: 'โŒจ๏ธ' }, { name: 'Apply Tests', result: results.apply, emoji: '๐ŸŽฏ' }, { name: 'Toggle Collection', result: results.toggleCollection, emoji: '๐Ÿ”ง' }, { name: 'Repo Instructions', result: results.repoInstructions, emoji: '๐Ÿค–' } ]; testTypes.forEach(test => { const status = test.result ? 'โœ… PASS' : 'โŒ FAIL'; console.log(`${test.emoji} ${test.name.padEnd(20)} ${status}`); }); const passedCount = Object.values(results).filter(Boolean).length; const totalCount = Object.keys(results).length; console.log('\n' + '-'.repeat(60)); console.log(`Overall Result: ${passedCount}/${totalCount} test suites passed`); if (passedCount === totalCount) { console.log('๐ŸŽ‰ All test suites passed! Implementation is complete.'); console.log('\nโœจ Features implemented:'); console.log(' โ€ข Effective state precedence (explicit > collection > disabled)'); console.log(' โ€ข Non-destructive collection toggles with delta summaries'); console.log(' โ€ข Enhanced CLI with reason display (explicit/collection)'); console.log(' โ€ข Performance improvements with Set-based lookups'); console.log(' โ€ข Comprehensive configuration handling'); console.log(' โ€ข Stable config hashing and idempotent operations'); return true; } else { console.log('๐Ÿ’ฅ Some test suites failed. Check individual test output above.'); return false; } } if (require.main === module) { runAllTests().then(success => { process.exit(success ? 0 : 1); }).catch(error => { console.error('Test suite runner error:', error); process.exit(1); }); } module.exports = { runAllTests };