UNPKG

@ytb-dw/sdk

Version:

Official JavaScript SDK for ytb-dw YouTube download service - Download YouTube videos and audio with ease

126 lines (113 loc) โ€ข 4.63 kB
// Test file for ytb-dw SDK const YtbDwClient = require('../index.js'); async function runTests() { console.log('๐Ÿงช Testing ytb-dw SDK...\n'); // Test 1: Constructor validation console.log('Test 1: Constructor validation'); try { new YtbDwClient(); // Should throw error console.log('โŒ Constructor should require API key'); process.exit(1); } catch (error) { console.log('โœ… Constructor correctly requires API key'); } // Test 2: Valid constructor console.log('\nTest 2: Valid constructor'); try { const client = new YtbDwClient('test-api-key'); console.log('โœ… Constructor works with API key'); } catch (error) { console.log('โŒ Constructor failed:', error.message); process.exit(1); } // Test 3: URL generation console.log('\nTest 3: URL generation'); try { const client = new YtbDwClient('test-api-key'); const url = client.getDownloadUrl('https://youtube.com/watch?v=test', { format: 'audio', quality: 'best' }); const expectedUrl = 'https://ytb-dw-api.onrender.com/download.php?api_key=test-api-key&url=https%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3Dtest&format=audio&quality=best'; if (url === expectedUrl) { console.log('โœ… URL generation works correctly'); } else { console.log('โŒ URL generation failed'); console.log('Expected:', expectedUrl); console.log('Got:', url); process.exit(1); } } catch (error) { console.log('โŒ URL generation failed:', error.message); process.exit(1); } // Test 4: Parameter validation console.log('\nTest 4: Parameter validation'); try { const client = new YtbDwClient('test-api-key'); await client.getVideoInfo(''); // Should throw error console.log('โŒ Should validate empty URL'); process.exit(1); } catch (error) { if (error.message.includes('YouTube URL is required')) { console.log('โœ… Parameter validation works'); } else { console.log('โŒ Wrong error message:', error.message); process.exit(1); } } // Test 5: Error message mapping console.log('\nTest 5: Error message mapping'); try { const client = new YtbDwClient('test-api-key'); const errorMsg = client._getErrorMessage(401); if (errorMsg.includes('Invalid or inactive API key')) { console.log('โœ… Error message mapping works'); } else { console.log('โŒ Wrong error message:', errorMsg); process.exit(1); } } catch (error) { console.log('โŒ Error message mapping failed:', error.message); process.exit(1); } // Test 6: Environment detection console.log('\nTest 6: Environment detection'); try { const client = new YtbDwClient('test-api-key'); // Test Node.js specific method if (typeof client.downloadToFile === 'function') { console.log('โœ… Node.js methods available'); } else { console.log('โŒ Node.js methods missing'); process.exit(1); } // Test browser-specific method should work but throw error when called try { client.openDownload('https://youtube.com/watch?v=test'); console.log('โŒ Browser method should throw error in Node.js'); process.exit(1); } catch (error) { if (error.message.includes('only available in browser')) { console.log('โœ… Environment detection works'); } else { console.log('โŒ Wrong environment error:', error.message); process.exit(1); } } } catch (error) { console.log('โŒ Environment detection failed:', error.message); process.exit(1); } console.log('\n๐ŸŽ‰ All tests passed! SDK is ready for publication.'); console.log('\nNext steps:'); console.log('1. npm login'); console.log('2. npm publish --access public'); console.log('\nNote: These tests only validate SDK structure and logic.'); console.log('For API functionality testing, you need a valid API key and internet connection.'); } // Run tests runTests().catch(error => { console.error('โŒ Test suite failed:', error.message); process.exit(1); });