feat(mcp-macro): fetch_cot_tff async fetcher with cache
This commit is contained in:
@@ -260,3 +260,61 @@ async def test_breakeven_high_inflation(httpx_mock: pytest_httpx.HTTPXMock):
|
||||
out = await fetch_breakeven_inflation(fred_api_key="k")
|
||||
assert out["interpretation"] == "high_inflation_expected"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_fetch_cot_tff_happy_path(httpx_mock: pytest_httpx.HTTPXMock):
|
||||
from mcp_macro.fetchers import fetch_cot_tff
|
||||
httpx_mock.add_response(
|
||||
url=httpx.URL(
|
||||
"https://publicreporting.cftc.gov/resource/gpe5-46if.json",
|
||||
params={
|
||||
"cftc_contract_market_code": "13874A",
|
||||
"$order": "report_date_as_yyyy_mm_dd DESC",
|
||||
"$limit": "52",
|
||||
},
|
||||
),
|
||||
json=[
|
||||
{
|
||||
"report_date_as_yyyy_mm_dd": "2026-04-22T00:00:00.000",
|
||||
"dealer_positions_long_all": "12345",
|
||||
"dealer_positions_short_all": "23456",
|
||||
"asset_mgr_positions_long": "654321",
|
||||
"asset_mgr_positions_short": "200000",
|
||||
"lev_money_positions_long": "100000",
|
||||
"lev_money_positions_short": "350000",
|
||||
"other_rept_positions_long": "50000",
|
||||
"other_rept_positions_short": "50000",
|
||||
"open_interest_all": "2500000",
|
||||
},
|
||||
{
|
||||
"report_date_as_yyyy_mm_dd": "2026-04-15T00:00:00.000",
|
||||
"dealer_positions_long_all": "11000",
|
||||
"dealer_positions_short_all": "22000",
|
||||
"asset_mgr_positions_long": "640000",
|
||||
"asset_mgr_positions_short": "210000",
|
||||
"lev_money_positions_long": "110000",
|
||||
"lev_money_positions_short": "320000",
|
||||
"other_rept_positions_long": "48000",
|
||||
"other_rept_positions_short": "52000",
|
||||
"open_interest_all": "2480000",
|
||||
},
|
||||
],
|
||||
)
|
||||
out = await fetch_cot_tff("ES", lookback_weeks=52)
|
||||
assert out["symbol"] == "ES"
|
||||
assert out["report_type"] == "tff"
|
||||
assert len(out["rows"]) == 2
|
||||
# Ordering ASC by date (oldest first)
|
||||
assert out["rows"][0]["report_date"] == "2026-04-15"
|
||||
assert out["rows"][1]["report_date"] == "2026-04-22"
|
||||
assert out["rows"][1]["lev_funds_net"] == -250000
|
||||
assert "data_timestamp" in out
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_fetch_cot_tff_unknown_symbol():
|
||||
from mcp_macro.fetchers import fetch_cot_tff
|
||||
out = await fetch_cot_tff("INVALID", lookback_weeks=52)
|
||||
assert out.get("error") == "unknown_symbol"
|
||||
assert "ES" in out.get("available", [])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user