test: add futures market-parsing test

This commit is contained in:
Matthias
2026-03-06 20:38:05 +01:00
parent 7f9b1a9f90
commit 1f4c188dbf
2 changed files with 68 additions and 0 deletions
+44
View File
@@ -572,6 +572,50 @@ EXCHANGES: dict[str, TestExchangeOnlineSetup] = {
"futures_pair": "BTC/USD:USD",
"hasQuoteVolumeFutures": False,
"leverage_tiers_public": True,
"sample_order_futures": [
{
# Trigger order
"exchange_response": {
"order": {
"type": "TRIGGER_ORDER",
"orderId": "a11a8ff3-17f3-5112-8caa-9cbbacfa1c8e",
"cliOrdId": None,
"symbol": "PF_XBTUSD",
"side": "buy",
"quantity": 0.0004,
"limitPrice": 71712,
"reduceOnly": True,
"timestamp": "2026-02-17T16:26:02.918Z",
"lastUpdateTimestamp": "2026-02-17T16:26:02.918Z",
"priceTriggerOptions": {
"triggerPrice": 71641,
"triggerSignal": "LAST_PRICE",
"triggerSide": "TRIGGER_ABOVE",
"limitPriceOffsetValue": None,
"limitPriceOffsetUnit": None,
},
},
"status": "TRIGGER_PLACED",
"updateReason": None,
"error": None,
},
"pair": "BTC/USD:USD",
"expected": {
"symbol": "BTC/USD:USD",
"id": "a11a8ff3-17f3-5112-8caa-9cbbacfa1c8e",
"timestamp": 1771345562918,
"datetime": "2026-02-17T16:26:02.918Z",
"price": 71712.0,
"status": "open",
"amount": 0.0004,
"side": "buy",
# TODO: this should work if stoploss is supposed to work.
# "triggerPrice": 71641.0,
# "stopPrice": 71641.0,
# "stopLossPrice": 71641.0,
},
},
],
},
}
+24
View File
@@ -101,6 +101,30 @@ class TestCCXTExchange:
else:
pytest.skip(f"No sample order available for exchange {exchangename}")
def test_ccxt_order_parse_futures(self, exchange_futures: EXCHANGE_FIXTURE_TYPE):
exch, exchangename, exchange_params = exchange_futures
if orders := exchange_params.get("sample_order_futures"):
for order in orders:
pair = order["pair"]
exchange_response: dict = order["exchange_response"]
market = exch._api.markets[pair]
po = exch._api.parse_order(exchange_response, market)
expected = order["expected"]
assert isinstance(po["id"], str)
assert po["id"] is not None
# Generic comparison which works for all fields
for key, value in expected.items():
assert key in po, f"Expected key {key} not found in parsed order"
assert isinstance(po[key], type(value)), (
f"Expected {key} to be of type {type(value)}, got {type(po[key])}"
)
assert po[key] == value, f"Expected {key} to be {value}, got {po[key]}"
else:
pytest.skip(f"No sample order available for exchange {exchangename}")
def test_ccxt_my_trades_parse(self, exchange: EXCHANGE_FIXTURE_TYPE):
exch, exchangename, exchange_params = exchange
if trades := exchange_params.get("sample_my_trades"):