Files
crypto_trader/tests/unit/backend/api/test_portfolio.py

66 lines
1.9 KiB
Python

"""Tests for portfolio API endpoints."""
import pytest
from unittest.mock import Mock, patch
from fastapi.testclient import TestClient
from backend.main import app
@pytest.fixture
def client():
"""Test client fixture."""
return TestClient(app)
@pytest.fixture
def mock_portfolio_tracker():
"""Mock portfolio tracker."""
tracker = Mock()
tracker.get_current_portfolio.return_value = {
"positions": [],
"performance": {"total_return": 0.1},
"timestamp": "2025-01-01T00:00:00"
}
tracker.get_portfolio_history.return_value = {
"dates": ["2025-01-01"],
"values": [1000.0],
"pnl": [0.0]
}
return tracker
class TestGetCurrentPortfolio:
"""Tests for GET /api/portfolio/current."""
@patch('backend.api.portfolio.get_portfolio_tracker')
def test_get_current_portfolio_success(self, mock_get_tracker, client, mock_portfolio_tracker):
"""Test getting current portfolio."""
mock_get_tracker.return_value = mock_portfolio_tracker
response = client.get("/api/portfolio/current?paper_trading=true")
assert response.status_code == 200
data = response.json()
assert "positions" in data
assert "performance" in data
assert "timestamp" in data
class TestGetPortfolioHistory:
"""Tests for GET /api/portfolio/history."""
@patch('backend.api.portfolio.get_portfolio_tracker')
def test_get_portfolio_history_success(self, mock_get_tracker, client, mock_portfolio_tracker):
"""Test getting portfolio history."""
mock_get_tracker.return_value = mock_portfolio_tracker
response = client.get("/api/portfolio/history?paper_trading=true&days=30")
assert response.status_code == 200
data = response.json()
assert "dates" in data
assert "values" in data
assert "pnl" in data