#!/usr/bin/env python3 """ Test script to verify backend search and download functionality. Tests the Flask-SocketIO backend running on port 5140. """ import socketio import time import json def test_backend_connection_and_search(): """Test backend WebSocket connection and search functionality.""" print("๐Ÿงช Testing Backend Search & Download Functionality") print("=" * 50) # Create a Socket.IO client sio = socketio.Client() # Track connection state connected = False search_results = None download_status = None @sio.event def connect(): nonlocal connected connected = True print("โœ… Connected to backend WebSocket server") @sio.event def disconnect(): print("โŒ Disconnected from backend WebSocket server") @sio.event def search_results(data): nonlocal search_results search_results = data print(f"๐Ÿ” Search results received: {len(data.get('results', {}).get('tracks', []))} tracks") # Print first few results tracks = data.get('results', {}).get('tracks', []) for i, track in enumerate(tracks[:3]): print(f" {i+1}. {track.get('name', 'Unknown')} by {track.get('artist', 'Unknown Artist')}") @sio.event def download_status(data): nonlocal download_status download_status = data print(f"๐Ÿ“ฅ Download status: {data.get('status', 'unknown')} - {data.get('message', '')}") @sio.event def connection_status(data): print(f"๐Ÿ”— Connection status: {data.get('status', 'unknown')}") try: # Connect to the backend print("๐Ÿ”Œ Connecting to backend at http://localhost:5140...") sio.connect('http://localhost:5140') # Wait for connection time.sleep(2) if not connected: print("โŒ Failed to connect to backend") return False # Test search functionality print("\n๐Ÿ” Testing search functionality...") test_query = "Daft Punk Get Lucky" print(f" Searching for: '{test_query}'") sio.emit('search', { 'query': test_query, 'type': 'track' }) # Wait for search results time.sleep(3) if search_results is None: print("โŒ No search results received") return False tracks = search_results.get('results', {}).get('tracks', []) if not tracks: print("โŒ No tracks found in search results") return False print(f"โœ… Search successful! Found {len(tracks)} tracks") # Test download functionality print("\n๐Ÿ“ฅ Testing download functionality...") first_track = tracks[0] print(f" Downloading: '{first_track.get('name')}' by '{first_track.get('artist')}'") sio.emit('download', { 'url': first_track.get('spotify_url', ''), 'type': 'track', 'name': first_track.get('name', ''), 'artist': first_track.get('artist', '') }) # Wait for download status time.sleep(2) if download_status is None: print("โŒ No download status received") return False print(f"โœ… Download request successful! Status: {download_status.get('status')}") return True except Exception as e: print(f"๐Ÿ’ฅ Error during backend test: {e}") return False finally: if sio.connected: sio.disconnect() def test_spotify_credentials(): """Test Spotify API credentials.""" print("\n๐ŸŽต Testing Spotify API credentials...") try: import spotipy from spotipy.oauth2 import SpotifyClientCredentials import os # Use the credentials from our backend client_id = "0ff7f14dddd49c75b5a5e5149361ea79" client_secret = "3a8432e90bb84430bf93c8ec9c839838" client_credentials_manager = SpotifyClientCredentials( client_id=client_id, client_secret=client_secret ) sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager) # Test search results = sp.search(q='Daft Punk Get Lucky', limit=1, type='track') if results['tracks']['items']: track = results['tracks']['items'][0] print(f"โœ… Spotify API working! Found: '{track['name']}' by '{track['artists'][0]['name']}'") return True else: print("โŒ Spotify API returned no results") return False except Exception as e: print(f"โŒ Spotify API test failed: {e}") return False if __name__ == "__main__": print("๐Ÿš€ Starting Backend Functionality Tests") print("=" * 60) # Test Spotify credentials first spotify_ok = test_spotify_credentials() # Test backend connection and functionality backend_ok = test_backend_connection_and_search() print("\n" + "=" * 60) print("๐Ÿ“Š TEST RESULTS:") print(f" Spotify API: {'โœ… PASS' if spotify_ok else 'โŒ FAIL'}") print(f" Backend WebSocket: {'โœ… PASS' if backend_ok else 'โŒ FAIL'}") if spotify_ok and backend_ok: print("\n๐ŸŽ‰ All tests passed! Backend is working correctly.") else: print("\nโš ๏ธ Some tests failed. Check the logs above for details.")