# test_youtube_tools.py (Updated with working test URLs) import sys import os import tempfile import shutil from dotenv import load_dotenv load_dotenv() sys.path.append(os.path.join(os.path.dirname(__file__), '..')) def test_youtube_tools(): """Test YouTube tool functions with reliable test URLs""" # Updated test URLs - using more reliable, public content test_video_url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ" # Rick Roll # Use a known public playlist test_playlist_url = "https://www.youtube.com/playlist?list=PLNVhQQnz1F5f11NXuOKF0oULKWWM2HfZS" # Small public playlist try: from tools.youtube_tools import YouTubeTools, get_video_info, download_video, get_captions print(" 📺 Initializing YouTube tools...") youtube_tools = YouTubeTools(max_retries=2, retry_delay=1.0) # Configure retry settings # Test video info retrieval print(" 📋 Testing video info retrieval...") video_info = youtube_tools.get_video_info(test_video_url) if video_info: print(" ✅ Video info retrieval: PASSED") print(f" Title: {video_info.get('title', 'Unknown')[:50]}...") print(f" Author: {video_info.get('author', 'Unknown')}") print(f" Duration: {video_info.get('length', 0)} seconds") print(f" Views: {video_info.get('views', 0):,}") print(f" Available captions: {video_info.get('captions_available', [])}") else: print(" ❌ Video info retrieval failed") # Test available qualities with retry print(" 🎥 Testing available qualities...") qualities = youtube_tools.get_available_qualities(test_video_url) if qualities: print(" ✅ Quality detection: PASSED") resolutions = [q['resolution'] for q in qualities if q['resolution'] != 'unknown'][:3] print(f" Available resolutions: {resolutions}") else: print(" ⚠️ Quality detection failed (network issue)") # Test captions (should work without deprecation warning) print(" 📝 Testing caption retrieval...") captions = youtube_tools.get_captions(test_video_url, 'en') if captions: print(" ✅ Caption retrieval: PASSED") print(f" Caption preview: {captions[:100]}...") elif captions is None: print(" ⚠️ No captions available for this video") else: print(" ❌ Caption retrieval failed") # Test playlist info with better URL print(" 📂 Testing playlist info...") try: playlist_info = youtube_tools.get_playlist_info(test_playlist_url) if playlist_info: print(" ✅ Playlist info: PASSED") print(f" Playlist: {playlist_info.get('title', 'Unknown')[:50]}...") print(f" Videos: {playlist_info.get('video_count', 0)}") else: print(" ⚠️ Playlist info failed") except Exception as e: print(f" ⚠️ Playlist test error: {str(e)}") # Test convenience functions print(" 🔧 Testing convenience functions...") convenience_info = get_video_info(test_video_url) if convenience_info: print(" ✅ Convenience functions: PASSED") # Test error handling print(" 🚨 Testing error handling...") invalid_info = youtube_tools.get_video_info("https://invalid-url") if invalid_info is None: print(" ✅ Error handling: PASSED") print(" ✅ YOUTUBE TOOLS TESTS COMPLETED!") # Demo output if video_info: print("\n 📋 YouTube Tools Demo:") print(f" Video: {video_info.get('title', 'Unknown')}") print(f" Channel: {video_info.get('author', 'Unknown')}") print(f" Published: {video_info.get('publish_date', 'Unknown')}") print(f" Length: {video_info.get('length', 0)} seconds") if qualities: best_quality = qualities[0] if qualities else {} print(f" Best quality: {best_quality.get('resolution', 'unknown')}") except ImportError as e: print(f" ❌ Import error: {e}") print(" Make sure pytubefix is installed: pip install pytubefix") except Exception as e: print(f" ❌ Test failed: {e}") import traceback traceback.print_exc() if __name__ == "__main__": test_youtube_tools()