summaryrefslogtreecommitdiff
path: root/shared/tests/test_exchange.py
blob: 95dc7d7b26f830f2b85b1a0f5d96c2eac5447e66 (plain)
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()