"""Tests for the exchange factory.""" from unittest.mock import patch import ccxt.async_support as ccxt import pytest from shared.exchange import create_exchange def test_create_exchange_binance(): """Verify create_exchange returns a ccxt.binance instance.""" exchange = create_exchange( exchange_id="binance", api_key="test-key", api_secret="test-secret", ) assert isinstance(exchange, ccxt.binance) assert exchange.apiKey == "test-key" assert exchange.secret == "test-secret" assert exchange.enableRateLimit is True def test_create_exchange_unknown(): """Verify create_exchange raises ValueError for unknown exchange.""" with pytest.raises(ValueError, match="Unknown exchange 'not_a_real_exchange'"): create_exchange( exchange_id="not_a_real_exchange", api_key="key", api_secret="secret", ) def test_create_exchange_with_sandbox(): """Verify sandbox mode is activated when sandbox=True.""" with patch.object(ccxt.binance, "set_sandbox_mode") as mock_sandbox: exchange = create_exchange( exchange_id="binance", api_key="key", api_secret="secret", sandbox=True, ) mock_sandbox.assert_called_once_with(True) assert isinstance(exchange, ccxt.binance) def test_create_exchange_no_sandbox_by_default(): """Verify sandbox mode is not set when sandbox=False (default).""" with patch.object(ccxt.binance, "set_sandbox_mode") as mock_sandbox: create_exchange( exchange_id="binance", api_key="key", api_secret="secret", ) mock_sandbox.assert_not_called()