Files
crypto_trader/tests/unit/exchanges/test_factory.py

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