Files
crypto_trader/tests/integration/test_ui_backtest_workflow.py

66 lines
1.8 KiB
Python
Raw Normal View History

"""Integration tests for UI backtest workflow."""
import pytest
from datetime import datetime, timedelta
from PyQt6.QtWidgets import QApplication
from unittest.mock import Mock, patch
from src.ui.widgets.backtest_view import BacktestViewWidget
from src.strategies.technical.rsi_strategy import RSIStrategy
@pytest.fixture
def app():
"""Create QApplication for tests."""
if not QApplication.instance():
return QApplication([])
return QApplication.instance()
@pytest.fixture
def backtest_view(app):
"""Create BacktestViewWidget."""
view = BacktestViewWidget()
# Mock backtest engine
mock_engine = Mock()
mock_engine.run_backtest.return_value = {
'total_return': 10.5,
'sharpe_ratio': 1.2,
'max_drawdown': -5.0,
'win_rate': 0.55,
'total_trades': 50,
'final_value': 110.5,
'trades': []
}
view.backtest_engine = mock_engine
return view
def test_backtest_configuration(backtest_view):
"""Test backtest configuration form."""
assert backtest_view.strategy_combo is not None
assert backtest_view.symbol_input is not None
assert backtest_view.start_date is not None
assert backtest_view.end_date is not None
def test_backtest_results_display(backtest_view):
"""Test backtest results are displayed."""
results = {
'total_return': 10.5,
'sharpe_ratio': 1.2,
'max_drawdown': -5.0,
'win_rate': 0.55,
'total_trades': 50,
'final_value': 110.5,
'trades': []
}
backtest_view._display_results(results)
# Verify metrics text contains results
metrics_text = backtest_view.metrics_text.toPlainText()
assert "10.5" in metrics_text # Total return
assert "1.2" in metrics_text # Sharpe ratio