41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
|
|
"""Tests for exchange factory."""
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
from unittest.mock import patch, Mock
|
||
|
|
from src.exchanges.factory import ExchangeFactory
|
||
|
|
from src.exchanges.coinbase import CoinbaseExchange
|
||
|
|
|
||
|
|
|
||
|
|
class TestExchangeFactory:
|
||
|
|
"""Tests for ExchangeFactory."""
|
||
|
|
|
||
|
|
def test_register_exchange(self):
|
||
|
|
"""Test exchange registration."""
|
||
|
|
ExchangeFactory.register_exchange("test_exchange", CoinbaseExchange)
|
||
|
|
assert "test_exchange" in ExchangeFactory.list_available()
|
||
|
|
|
||
|
|
def test_get_exchange(self):
|
||
|
|
"""Test getting exchange instance."""
|
||
|
|
with patch('src.exchanges.factory.get_key_manager') as mock_km:
|
||
|
|
mock_km.return_value.get_exchange_keys.return_value = {
|
||
|
|
'api_key': 'test_key',
|
||
|
|
'secret_key': 'test_secret',
|
||
|
|
'permissions': 'read_only'
|
||
|
|
}
|
||
|
|
|
||
|
|
exchange = ExchangeFactory.get_exchange("coinbase")
|
||
|
|
assert exchange is not None
|
||
|
|
assert isinstance(exchange, CoinbaseExchange)
|
||
|
|
|
||
|
|
def test_get_nonexistent_exchange(self):
|
||
|
|
"""Test getting non-existent exchange."""
|
||
|
|
with pytest.raises(ValueError, match="not registered"):
|
||
|
|
ExchangeFactory.get_exchange("nonexistent")
|
||
|
|
|
||
|
|
def test_list_available(self):
|
||
|
|
"""Test listing available exchanges."""
|
||
|
|
exchanges = ExchangeFactory.list_available()
|
||
|
|
assert isinstance(exchanges, list)
|
||
|
|
assert "coinbase" in exchanges
|
||
|
|
|