#!/usr/bin/env python3 """ FRED ML - Streamlit UI Test Simple test to validate Streamlit UI functionality """ import os import sys import subprocess from pathlib import Path def test_streamlit_ui(): """Test Streamlit UI functionality""" print("๐ŸŽจ Testing Streamlit UI...") # Check if Streamlit app exists app_path = Path(__file__).parent.parent / 'frontend/app.py' if not app_path.exists(): print("โŒ Streamlit app not found") return False print("โœ… Streamlit app exists") # Check app content with open(app_path, 'r') as f: content = f.read() # Check for required components required_components = [ 'st.set_page_config', 'show_executive_dashboard', 'show_advanced_analytics_page', 'show_indicators_page', 'show_reports_page', 'show_configuration_page' ] missing_components = [] for component in required_components: if component not in content: missing_components.append(component) if missing_components: print(f"โŒ Missing components in Streamlit app: {missing_components}") return False else: print("โœ… All required Streamlit components found") # Check for enterprise styling styling_components = [ 'main-header', 'metric-card', 'analysis-section', 'chart-container' ] missing_styling = [] for component in styling_components: if component not in content: missing_styling.append(component) if missing_styling: print(f"โš ๏ธ Missing styling components: {missing_styling}") else: print("โœ… Enterprise styling components found") # Check for analytics integration analytics_components = [ 'ComprehensiveAnalytics', 'EnhancedFREDClient', 'display_analysis_results' ] missing_analytics = [] for component in analytics_components: if component not in content: missing_analytics.append(component) if missing_analytics: print(f"โš ๏ธ Missing analytics components: {missing_analytics}") else: print("โœ… Analytics integration components found") print("โœ… Streamlit UI test passed") return True def test_streamlit_syntax(): """Test Streamlit app syntax""" print("๐Ÿ” Testing Streamlit app syntax...") app_path = Path(__file__).parent.parent / 'frontend/app.py' try: with open(app_path, 'r') as f: compile(f.read(), str(app_path), 'exec') print("โœ… Streamlit app syntax is valid") return True except SyntaxError as e: print(f"โŒ Streamlit app syntax error: {e}") return False except Exception as e: print(f"โŒ Error testing syntax: {e}") return False def test_streamlit_launch(): """Test if Streamlit can launch the app""" print("๐Ÿš€ Testing Streamlit launch capability...") try: # Test if streamlit is available result = subprocess.run( ['streamlit', '--version'], capture_output=True, text=True ) if result.returncode == 0: print(f"โœ… Streamlit version: {result.stdout.strip()}") return True else: print("โŒ Streamlit not available") return False except FileNotFoundError: print("โŒ Streamlit not installed") return False except Exception as e: print(f"โŒ Error testing Streamlit: {e}") return False def main(): """Main test function""" print("๐Ÿงช Starting Streamlit UI Test") print("=" * 50) # Test 1: UI Components ui_test = test_streamlit_ui() # Test 2: Syntax syntax_test = test_streamlit_syntax() # Test 3: Launch capability launch_test = test_streamlit_launch() # Summary print("\n" + "=" * 50) print("๐Ÿ“Š STREAMLIT UI TEST RESULTS") print("=" * 50) tests = [ ("UI Components", ui_test), ("Syntax Check", syntax_test), ("Launch Capability", launch_test) ] passed = 0 for test_name, result in tests: status = "โœ… PASS" if result else "โŒ FAIL" print(f"{test_name}: {status}") if result: passed += 1 print(f"\nOverall: {passed}/{len(tests)} tests passed") if passed == len(tests): print("๐ŸŽ‰ All Streamlit UI tests passed!") return True else: print("โŒ Some Streamlit UI tests failed") return False if __name__ == "__main__": success = main() sys.exit(0 if success else 1)