summaryrefslogtreecommitdiff
path: root/shared/tests/test_alpaca.py
blob: 55a2b246a0b0c0773e6b2fdd841ab953509e14e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"""Tests for Alpaca API client."""

from unittest.mock import AsyncMock, MagicMock

import pytest

from shared.alpaca import AlpacaClient


@pytest.fixture
def client():
    return AlpacaClient(api_key="test-key", api_secret="test-secret", paper=True)


def test_client_uses_paper_url(client):
    assert "paper" in client._base_url


def test_client_uses_live_url():
    c = AlpacaClient(api_key="k", api_secret="s", paper=False)
    assert "paper" not in c._base_url


def test_client_headers(client):
    h = client.headers
    assert h["APCA-API-KEY-ID"] == "test-key"
    assert h["APCA-API-SECRET-KEY"] == "test-secret"


@pytest.mark.asyncio
async def test_get_buying_power(client):
    mock_response = AsyncMock()
    mock_response.status = 200
    mock_response.json = AsyncMock(return_value={"buying_power": "10000.00"})
    mock_response.__aenter__ = AsyncMock(return_value=mock_response)
    mock_response.__aexit__ = AsyncMock(return_value=False)

    mock_session = MagicMock()
    mock_session.closed = False
    mock_session.request = MagicMock(return_value=mock_response)
    mock_session.close = AsyncMock()
    client._session = mock_session

    result = await client.get_buying_power()
    from decimal import Decimal

    assert result == Decimal("10000.00")
    await client.close()


@pytest.mark.asyncio
async def test_submit_moc_order(client):
    mock_response = AsyncMock()
    mock_response.status = 200
    mock_response.json = AsyncMock(return_value={"id": "order-1", "status": "accepted"})
    mock_response.__aenter__ = AsyncMock(return_value=mock_response)
    mock_response.__aexit__ = AsyncMock(return_value=False)

    mock_session = MagicMock()
    mock_session.closed = False
    mock_session.request = MagicMock(return_value=mock_response)
    mock_session.close = AsyncMock()
    client._session = mock_session

    result = await client.submit_moc_order("AAPL", qty=10, side="buy")
    assert result["id"] == "order-1"

    # Verify the request was made with correct params
    call_args = mock_session.request.call_args
    assert call_args[0][0] == "POST"
    await client.close()