1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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()
|