summaryrefslogtreecommitdiff
path: root/shared/tests/test_exchange.py
diff options
context:
space:
mode:
Diffstat (limited to 'shared/tests/test_exchange.py')
-rw-r--r--shared/tests/test_exchange.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/shared/tests/test_exchange.py b/shared/tests/test_exchange.py
new file mode 100644
index 0000000..95dc7d7
--- /dev/null
+++ b/shared/tests/test_exchange.py
@@ -0,0 +1,55 @@
+"""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()