UNPKG

opex-yt-info

Version:

Node.js library for searching YouTube (videos, channels, live), getting video/playlist metadata, and fetching homepage/trending videos.

153 lines (131 loc) 7.53 kB
import { searchVideos, searchChannels, searchLive, searchAll, getVideo, getPlaylist } from './index.js'; // Используем твои ID для тестов const TEST_VIDEO_ID = 'dQw4w9WgXcQ'; // Rick Astley const TEST_VIDEO_URL = `https://www.youtube.com/watch?v=${TEST_VIDEO_ID}`; const TEST_PLAYLIST_ID = 'PLzDFYTz8KSyBUDaNaPOKVjomV2lCm5W4G'; // Твой плейлист const TEST_PLAYLIST_URL = `https://www.youtube.com/playlist?list=${TEST_PLAYLIST_ID}`; const TEST_INVALID_ID = 'invalid_id_string'; const TEST_INVALID_URL = 'https://example.com'; // Helper for logging test results function logTestResult(testName, success, details = '') { const prefix = success ? '✅ PASS:' : '❌ FAIL:'; console.log(`${prefix} ${testName}${details ? ` - ${details}` : ''}`); if (!success) { // Optionally throw an error to stop execution on failure // throw new Error(`Test failed: ${testName}`); } } async function runTests() { console.log('--- Starting opex-yt-info tests (using yt-search) ---'); let overallSuccess = true; let success = true; let result; // --- Search Tests --- try { result = await searchVideos('synthwave', { pageEnd: 1 }); success = Array.isArray(result) && result.length > 0 && result[0].type === 'video'; logTestResult('searchVideos', success, `Found ${result.length} videos`); if (!success) overallSuccess = false; } catch (e) { logTestResult('searchVideos', false, e.message); overallSuccess = false; } try { result = await searchChannels('freecodecamp', { pageEnd: 1 }); success = Array.isArray(result) && result.length > 0 && result[0].type === 'channel'; logTestResult('searchChannels', success, `Found ${result.length} channels`); if (!success) overallSuccess = false; } catch (e) { logTestResult('searchChannels', false, e.message); overallSuccess = false; } try { result = await searchLive('live news', { pageEnd: 1 }); success = Array.isArray(result); logTestResult('searchLive', success, `Found ${result.length} live streams (can be 0)`); if (!success && !(Array.isArray(result))) overallSuccess = false; // Fail only if error or not array } catch (e) { logTestResult('searchLive', false, e.message); overallSuccess = false; } try { result = await searchAll('coding music', { pageEnd: 1 }); success = Array.isArray(result) && result.length > 0 && result.some(r => ['video', 'channel', 'live', 'list'].includes(r.type)); logTestResult('searchAll', success, `Found ${result.length} mixed results`); if (!success) overallSuccess = false; } catch (e) { logTestResult('searchAll', false, e.message); overallSuccess = false; } // --- Get Metadata Tests (using yt-search) --- try { result = await getVideo(TEST_VIDEO_ID); // Проверяем ключевые поля, которые yt-search должен вернуть для видео success = result !== null && result.videoId === TEST_VIDEO_ID && typeof result.title === 'string' && typeof result.seconds === 'number' && typeof result.views === 'number'; logTestResult('getVideo (by ID)', success, result ? `Title: ${result.title.substring(0, 30)}...` : 'Not found or error'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getVideo (by ID)', false, e.message); overallSuccess = false; } try { result = await getVideo(TEST_VIDEO_URL); success = result !== null && result.videoId === TEST_VIDEO_ID && typeof result.uploadDate === 'string'; // Проверяем uploadDate logTestResult('getVideo (by URL)', success, result ? `Upload Date: ${result.uploadDate}` : 'Not found or error'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getVideo (by URL)', false, e.message); overallSuccess = false; } try { result = await getVideo(TEST_INVALID_ID); success = result === null; logTestResult('getVideo (invalid ID)', success, 'Correctly returned null'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getVideo (invalid ID)', false, `Unexpected error: ${e.message}`); overallSuccess = false; } try { result = await getVideo(TEST_INVALID_URL); success = result === null; logTestResult('getVideo (invalid URL)', success, 'Correctly returned null'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getVideo (invalid URL)', false, `Unexpected error: ${e.message}`); overallSuccess = false; } try { result = await getPlaylist(TEST_PLAYLIST_ID); // Проверяем ключевые поля для плейлиста success = result !== null && result.listId === TEST_PLAYLIST_ID && Array.isArray(result.videos) && typeof result.title === 'string'; logTestResult('getPlaylist (by ID)', success, result ? `Title: ${result.title}, Videos found: ${result.videos.length}` : 'Not found or error'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getPlaylist (by ID)', false, e.message); overallSuccess = false; } try { result = await getPlaylist(TEST_PLAYLIST_URL); success = result !== null && result.listId === TEST_PLAYLIST_ID && typeof result.size === 'number'; logTestResult('getPlaylist (by URL)', success, result ? `Size: ${result.size}` : 'Not found or error'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getPlaylist (by URL)', false, e.message); overallSuccess = false; } try { result = await getPlaylist(TEST_INVALID_ID); success = result === null; logTestResult('getPlaylist (invalid ID)', success, 'Correctly returned null'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getPlaylist (invalid ID)', false, `Unexpected error: ${e.message}`); overallSuccess = false; } try { result = await getPlaylist(TEST_INVALID_URL); success = result === null; logTestResult('getPlaylist (invalid URL)', success, 'Correctly returned null'); if (!success) overallSuccess = false; } catch (e) { logTestResult('getPlaylist (invalid URL)', false, `Unexpected error: ${e.message}`); overallSuccess = false; } // --- Test empty query --- try { result = await searchVideos(''); success = Array.isArray(result) && result.length === 0; logTestResult('searchVideos (empty query)', success, `Returned ${result.length} results`); if (!success) overallSuccess = false; } catch (e) { logTestResult('searchVideos (empty query)', false, e.message); overallSuccess = false; } try { result = await searchAll(''); success = Array.isArray(result) && result.length === 0; logTestResult('searchAll (empty query)', success, `Returned ${result.length} results`); if (!success) overallSuccess = false; } catch (e) { logTestResult('searchAll (empty query)', false, e.message); overallSuccess = false; } console.log('--- Tests finished ---'); if (!overallSuccess) { console.error('\n❌ Some tests failed!'); process.exit(1); } else { console.log('\n✅ All tests passed!'); process.exit(0); } } runTests().catch(err => { console.error("Unhandled error during tests:", err); process.exit(1); });