@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
JavaScript
// 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);
});