algorithmic_trading / tests /test_ui_integration.py
Edwin Salguero
feat(ui): add robust multi-interface UI system (Streamlit, Dash, Jupyter, WebSocket) with launcher, docs, and integration tests [skip ci]
9f44dc9
"""
Test UI integration for the algorithmic trading system
"""
import pytest
import sys
import os
from unittest.mock import patch, MagicMock
# Add project root to path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def test_ui_imports():
"""Test that UI modules can be imported"""
try:
from ui import create_streamlit_app, create_dash_app, create_jupyter_interface, TradingWebSocketServer
assert True
except ImportError as e:
pytest.fail(f"Failed to import UI modules: {e}")
def test_streamlit_app_creation():
"""Test Streamlit app creation"""
try:
from ui.streamlit_app import TradingUI
ui = TradingUI()
assert ui is not None
assert hasattr(ui, 'config')
assert hasattr(ui, 'data')
assert hasattr(ui, 'alpaca_broker')
except Exception as e:
pytest.fail(f"Failed to create Streamlit UI: {e}")
def test_dash_app_creation():
"""Test Dash app creation"""
try:
from ui.dash_app import TradingDashApp
app = TradingDashApp()
assert app is not None
assert hasattr(app, 'app')
assert hasattr(app, 'config')
except Exception as e:
pytest.fail(f"Failed to create Dash app: {e}")
def test_jupyter_ui_creation():
"""Test Jupyter UI creation"""
try:
from ui.jupyter_widgets import TradingJupyterUI
ui = TradingJupyterUI()
assert ui is not None
assert hasattr(ui, 'config')
assert hasattr(ui, 'data')
except Exception as e:
pytest.fail(f"Failed to create Jupyter UI: {e}")
def test_websocket_server_creation():
"""Test WebSocket server creation"""
try:
from ui.websocket_server import TradingWebSocketServer
server = TradingWebSocketServer(host="localhost", port=8765)
assert server is not None
assert server.host == "localhost"
assert server.port == 8765
assert hasattr(server, 'clients')
except Exception as e:
pytest.fail(f"Failed to create WebSocket server: {e}")
def test_ui_launcher_imports():
"""Test UI launcher imports"""
try:
import ui_launcher
assert hasattr(ui_launcher, 'check_dependencies')
assert hasattr(ui_launcher, 'launch_streamlit')
assert hasattr(ui_launcher, 'launch_dash')
assert hasattr(ui_launcher, 'launch_jupyter')
assert hasattr(ui_launcher, 'launch_websocket_server')
except Exception as e:
pytest.fail(f"Failed to import UI launcher: {e}")
@patch('subprocess.run')
def test_ui_launcher_functions(mock_run):
"""Test UI launcher functions"""
mock_run.return_value = MagicMock()
try:
import ui_launcher
# Test dependency check
result = ui_launcher.check_dependencies()
assert isinstance(result, bool)
# Test launcher functions (they should not raise exceptions)
ui_launcher.launch_streamlit()
ui_launcher.launch_dash()
ui_launcher.launch_jupyter()
ui_launcher.launch_websocket_server()
except Exception as e:
pytest.fail(f"Failed to test UI launcher functions: {e}")
def test_ui_configuration():
"""Test UI configuration loading"""
try:
from agentic_ai_system.main import load_config
config = load_config()
# Check if UI-related config can be added
config['ui'] = {
'streamlit': {
'server_port': 8501,
'server_address': "0.0.0.0"
},
'dash': {
'server_port': 8050,
'server_address': "0.0.0.0"
}
}
assert 'ui' in config
assert 'streamlit' in config['ui']
assert 'dash' in config['ui']
except Exception as e:
pytest.fail(f"Failed to test UI configuration: {e}")
def test_ui_dependencies():
"""Test that UI dependencies are available"""
required_packages = [
'streamlit',
'dash',
'plotly',
'ipywidgets'
]
missing_packages = []
for package in required_packages:
try:
__import__(package)
except ImportError:
missing_packages.append(package)
if missing_packages:
pytest.skip(f"Missing UI dependencies: {missing_packages}")
else:
assert True
if __name__ == "__main__":
pytest.main([__file__])