feat(V2): IBKR read tool schemas + dispatch functions
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
import pytest
|
||||
from cerbero_mcp.exchanges.ibkr import tools as t
|
||||
|
||||
|
||||
def test_place_order_req_schema():
|
||||
req = t.PlaceOrderReq(symbol="AAPL", side="buy", qty=1)
|
||||
assert req.order_type == "market"
|
||||
assert req.tif == "day"
|
||||
assert req.exchange == "SMART"
|
||||
|
||||
|
||||
def test_place_order_req_options_validates_occ():
|
||||
req = t.PlaceOrderReq(
|
||||
symbol="AAPL 240119C00190000", side="buy", qty=1, asset_class="options",
|
||||
)
|
||||
assert req.asset_class == "options"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_account_tool_calls_client():
|
||||
client = MagicMock()
|
||||
client.get_account = AsyncMock(return_value={"netliquidation": {"amount": 10000}})
|
||||
res = await t.get_account(client, t.GetAccountReq())
|
||||
assert res["netliquidation"]["amount"] == 10000
|
||||
Reference in New Issue
Block a user