/** * Manual testing script for TP-Link unified API * * Usage: * npm run test:manual -- --discover * npm run test:manual -- --kasa 192.168.1.100 * npm run test:manual -- --tapo 192.168.1.101 --email user@example.com --password pass * npm run test:manual -- --unified --email user@example.com --password pass */ import { testDiscovery } from './utils/discovery-utils'; import { testKasaDevice } from './utils/kasa-utils'; import { testTapoDevice } from './utils/tapo-utils'; import { testUnifiedAPI } from './utils/unified-api-utils'; const args = process.argv.slice(2); async function main() { console.log('TP-Link Unified API Manual Test Tool\n'); console.log('=====================================\n'); // Parse command line arguments const options = { discover: args.includes('--discover'), kasa: args.includes('--kasa') ? args[args.indexOf('--kasa') + 1] : null, tapo: args.includes('--tapo') ? args[args.indexOf('--tapo') + 1] : null, unified: args.includes('--unified'), email: args.includes('--email') ? args[args.indexOf('--email') + 1] : process.env.TPLINK_EMAIL, password: args.includes('--password') ? args[args.indexOf('--password') + 1] : process.env.TPLINK_PASSWORD, }; // Show help if no options provided if (!options.discover && !options.kasa && !options.tapo && !options.unified) { console.log('Available commands:\n'); console.log(' --discover Discover all TP-Link devices on network'); console.log(' --kasa Test a specific Kasa device'); console.log(' --tapo Test a specific Tapo device'); console.log(' --unified Run full unified API integration test'); console.log(' --email TP-Link account email (for Tapo/unified)'); console.log(' --password TP-Link account password (for Tapo/unified)'); console.log('\nEnvironment variables:'); console.log(' TPLINK_EMAIL Default email for authentication'); console.log(' TPLINK_PASSWORD Default password for authentication'); console.log('\nExamples:'); console.log(' npm run test:manual -- --discover'); console.log(' npm run test:manual -- --kasa 192.168.1.100'); console.log(' npm run test:manual -- --tapo 192.168.1.101 --email user@example.com --password pass'); console.log(' npm run test:manual -- --unified'); return; } try { // Run discovery test if (options.discover) { console.log('Running device discovery...\n'); const config = { includeKasa: true, includeTapo: !!(options.email && options.password), email: options.email, password: options.password, }; if (!config.includeTapo) { console.log('Note: Tapo discovery requires --email and --password\n'); } await testDiscovery(config); } // Test Kasa device if (options.kasa) { console.log(`\nTesting Kasa device at ${options.kasa}...\n`); const success = await testKasaDevice(options.kasa); console.log(success ? '\n✅ Kasa test passed!' : '\n❌ Kasa test failed!'); } // Test Tapo device if (options.tapo) { if (!options.email || !options.password) { console.error('\n❌ Tapo testing requires --email and --password'); return; } console.log(`\nTesting Tapo device at ${options.tapo}...\n`); const success = await testTapoDevice(options.tapo, options.email, options.password); console.log(success ? '\n✅ Tapo test passed!' : '\n❌ Tapo test failed!'); } // Run unified API test if (options.unified) { if (!options.email || !options.password) { console.log('\nNote: Running unified test without Tapo support (no credentials)'); console.log('Provide --email and --password for full testing\n'); } await testUnifiedAPI(options.email, options.password); } } catch (error) { console.error('\n❌ Test failed with error:', error); process.exit(1); } } // Run the tests main().catch(console.error);