Files
crypto_trader/tests/integration/test_ui_trading_workflow.py

78 lines
2.3 KiB
Python

"""Integration tests for UI trading workflow."""
import pytest
from decimal import Decimal
from PyQt6.QtWidgets import QApplication
from unittest.mock import Mock, patch
from src.ui.widgets.trading_view import TradingView
from src.core.database import Order, OrderStatus, OrderSide, OrderType
@pytest.fixture
def app():
"""Create QApplication for tests."""
if not QApplication.instance():
return QApplication([])
return QApplication.instance()
@pytest.fixture
def trading_view(app):
"""Create TradingView with mocked backend."""
view = TradingView()
# Mock trading engine
mock_engine = Mock()
mock_order = Mock(spec=Order)
mock_order.id = 1
mock_engine.execute_order.return_value = mock_order
view.trading_engine = mock_engine
return view
def test_order_placement_workflow(trading_view):
"""Test complete order placement workflow."""
# Set up form
trading_view.current_exchange_id = 1
trading_view.current_symbol = "BTC/USD"
trading_view.order_type_combo.setCurrentText("Market")
trading_view.side_combo.setCurrentText("Buy")
trading_view.quantity_input.setValue(0.1)
# Place order
trading_view._place_order()
# Verify engine was called
trading_view.trading_engine.execute_order.assert_called_once()
call_args = trading_view.trading_engine.execute_order.call_args
assert call_args[1]['symbol'] == "BTC/USD"
assert call_args[1]['side'] == OrderSide.BUY
def test_position_table_update(trading_view):
"""Test positions table updates with portfolio data."""
# Mock portfolio data
mock_portfolio = {
'positions': [
{
'symbol': 'BTC/USD',
'quantity': 0.1,
'entry_price': 50000,
'current_price': 51000,
'unrealized_pnl': 100
}
],
'performance': {
'current_value': 5100,
'unrealized_pnl': 100,
'realized_pnl': 0
}
}
trading_view.portfolio_tracker.get_current_portfolio = Mock(return_value=mock_portfolio)
trading_view._update_positions()
assert trading_view.positions_table.rowCount() == 1
assert trading_view.positions_table.item(0, 0).text() == "BTC/USD"