Local changes: Updated model training, removed debug instrumentation, and configuration improvements
This commit is contained in:
108
tests/unit/backend/api/test_strategies.py
Normal file
108
tests/unit/backend/api/test_strategies.py
Normal file
@@ -0,0 +1,108 @@
|
||||
"""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
|
||||
|
||||
Reference in New Issue
Block a user