Files

109 lines
3.3 KiB
Python
Raw Permalink Normal View History

"""Tests for strategies API endpoints."""
import pytest
from unittest.mock import Mock, patch, MagicMock
from fastapi.testclient import TestClient
from backend.main import app
from src.core.database import Strategy
@pytest.fixture
def client():
"""Test client fixture."""
return TestClient(app)
@pytest.fixture
def mock_strategy_registry():
"""Mock strategy registry."""
registry = Mock()
registry.list_available.return_value = ["RSIStrategy", "MACDStrategy"]
return registry
@pytest.fixture
def mock_strategy():
"""Mock strategy object."""
strategy = Mock(spec=Strategy)
strategy.id = 1
strategy.name = "Test Strategy"
strategy.type = "RSIStrategy"
strategy.status = "active" # Use string instead of enum
strategy.symbol = "BTC/USD"
strategy.params = {}
return strategy
class TestListStrategies:
"""Tests for GET /api/strategies."""
@patch('backend.api.strategies.get_db')
def test_list_strategies_success(self, mock_get_db, client):
"""Test listing strategies."""
mock_db = Mock()
mock_session = Mock()
mock_db.get_session.return_value = mock_session
mock_get_db.return_value = mock_db
mock_session.query.return_value.all.return_value = []
response = client.get("/api/strategies")
assert response.status_code == 200
data = response.json()
assert isinstance(data, list)
class TestGetStrategy:
"""Tests for GET /api/strategies/{strategy_id}."""
@patch('backend.api.strategies.get_db')
def test_get_strategy_success(self, mock_get_db, client, mock_strategy):
"""Test getting strategy by ID."""
mock_db = Mock()
mock_session = Mock()
mock_db.get_session.return_value = mock_session
mock_get_db.return_value = mock_db
mock_session.query.return_value.filter_by.return_value.first.return_value = mock_strategy
response = client.get("/api/strategies/1")
assert response.status_code == 200
data = response.json()
assert data["id"] == 1
@patch('backend.api.strategies.get_db')
def test_get_strategy_not_found(self, mock_get_db, client):
"""Test getting non-existent strategy."""
mock_db = Mock()
mock_session = Mock()
mock_db.get_session.return_value = mock_session
mock_get_db.return_value = mock_db
mock_session.query.return_value.filter_by.return_value.first.return_value = None
response = client.get("/api/strategies/999")
assert response.status_code == 404
assert "Strategy not found" in response.json()["detail"]
class TestListAvailableStrategyTypes:
"""Tests for GET /api/strategies/types."""
@patch('backend.api.strategies.get_strategy_registry')
def test_list_strategy_types_success(self, mock_get_registry, client, mock_strategy_registry):
"""Test listing available strategy types."""
mock_get_registry.return_value = mock_strategy_registry
response = client.get("/api/strategies/types")
assert response.status_code == 200
data = response.json()
assert isinstance(data, list)
assert "RSIStrategy" in data