summaryrefslogtreecommitdiff
path: root/shared/tests/test_alpaca.py
diff options
context:
space:
mode:
Diffstat (limited to 'shared/tests/test_alpaca.py')
-rw-r--r--shared/tests/test_alpaca.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/shared/tests/test_alpaca.py b/shared/tests/test_alpaca.py
new file mode 100644
index 0000000..55a2b24
--- /dev/null
+++ b/shared/tests/test_alpaca.py
@@ -0,0 +1,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()