Files
crypto_monitor_user/tests/test_options_pending_lib.py
T
dekun 53863559f4 Initialize crypto_monitor_user (user edition) from monitor codebase.
Retarget git remote, install path, and deploy docs from crypto_monitor to crypto_monitor_user.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 16:18:13 +08:00

64 lines
2.3 KiB
Python

"""期权挂单超时撤单单测."""
from unittest import TestCase
from lib.options.options_pending_lib import (
cancel_stale_close_pending_orders,
enrich_pending_orders,
is_close_pending_order,
order_age_seconds,
)
class OptionsPendingLibTests(TestCase):
def test_order_age_and_close_detect(self):
now = 1_700_000_600_000
age = order_age_seconds({"c_time": now - 90_000}, now_ms=now)
self.assertAlmostEqual(age, 90.0, places=3)
self.assertTrue(is_close_pending_order({"side": "sell"}))
self.assertTrue(is_close_pending_order({"side": "buy", "reduce_only": True}))
self.assertFalse(is_close_pending_order({"side": "buy"}))
def test_enrich_expire(self):
now = 1_700_000_600_000
rows = enrich_pending_orders(
[
{"ord_id": "1", "inst_id": "A", "side": "sell", "c_time": now - 700_000},
{"ord_id": "2", "inst_id": "B", "side": "buy", "c_time": now - 700_000},
{"ord_id": "3", "inst_id": "C", "side": "sell", "c_time": now - 30_000},
],
ttl_seconds=600,
now_ms=now,
)
by_id = {r["ord_id"]: r for r in rows}
self.assertTrue(by_id["1"]["stale"])
self.assertTrue(by_id["1"]["auto_cancel_enabled"])
self.assertFalse(by_id["2"]["auto_cancel_enabled"])
self.assertFalse(by_id["3"]["stale"])
self.assertAlmostEqual(by_id["3"]["expire_in_sec"], 570.0, places=0)
def test_cancel_stale_only_close(self):
now = 1_700_000_600_000
pending = [
{"ord_id": "s1", "inst_id": "A", "side": "sell", "c_time": now - 700_000},
{"ord_id": "b1", "inst_id": "B", "side": "buy", "c_time": now - 700_000},
{"ord_id": "s2", "inst_id": "C", "side": "sell", "c_time": now - 10_000},
]
cancelled = []
def fetch(_ex=None):
return pending
def cancel(_ex=None, inst_id=None, ord_id=None):
cancelled.append((inst_id, ord_id))
return {"ok": True}
out = cancel_stale_close_pending_orders(
fetch_pending=fetch,
cancel_order=cancel,
ttl_seconds=60,
now_ms=now,
ex=object(),
)
self.assertEqual(out["cancelled"], 1)
self.assertEqual(cancelled, [("A", "s1")])