summaryrefslogtreecommitdiff
path: root/shared/tests/test_exchange.py
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:24:57 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:24:57 +0900
commit21c6b777530b4a027aec9c12bf63092e5a7c006d (patch)
tree0c4302b258a3318d473e31bfba391ba05e247d92 /shared/tests/test_exchange.py
parent4e6ae373b6abc7ef0d5fb810385d14250757f3f1 (diff)
feat: add multi-exchange support via ccxt factory
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()