feat(risk): show live countdown on freeze status badges
Expose freeze_until_ms from risk API and tick hub/instance badges with remaining 1h/4h/daily time. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -248,6 +248,38 @@ class AccountRiskLibTests(unittest.TestCase):
|
||||
def test_parse_mood_issues_filters_unknown(self):
|
||||
self.assertEqual(parse_mood_issues("怕踏空,未知标签,扛单"), ["怕踏空", "扛单"])
|
||||
|
||||
def test_enrich_countdown_for_daily_and_cooloff(self):
|
||||
conn = _mem_conn()
|
||||
now = datetime(2026, 6, 14, 12, 0, 0)
|
||||
close_ms = int(now.replace(tzinfo=timezone.utc).timestamp() * 1000)
|
||||
on_user_initiated_close(
|
||||
conn,
|
||||
source=CLOSE_SOURCE_USER_INSTANCE,
|
||||
closed_at_ms=close_ms,
|
||||
trading_day="2026-06-14",
|
||||
now=now,
|
||||
)
|
||||
st = compute_account_risk_status(conn, trading_day="2026-06-14", now=now)
|
||||
from account_risk_lib import enrich_risk_status_countdown
|
||||
|
||||
st = enrich_risk_status_countdown(st, now=now, daily_reset_hour=8)
|
||||
self.assertGreater(st["freeze_remaining_sec"], 0)
|
||||
self.assertEqual(st["freeze_until_ms"], st["cooloff_until_ms"])
|
||||
|
||||
on_journal_saved(
|
||||
conn,
|
||||
early_exit_trigger="止损",
|
||||
early_exit_note="",
|
||||
mood_issues_raw="扛单",
|
||||
trading_day="2026-06-14",
|
||||
now=now,
|
||||
)
|
||||
st2 = compute_account_risk_status(conn, trading_day="2026-06-14", now=now)
|
||||
st2 = enrich_risk_status_countdown(st2, now=now, daily_reset_hour=8)
|
||||
self.assertTrue(st2["daily_frozen"])
|
||||
self.assertGreater(st2["freeze_remaining_sec"], 0)
|
||||
self.assertIsNotNone(st2["freeze_until_ms"])
|
||||
|
||||
def test_disabled_risk_control(self):
|
||||
os.environ["RISK_CONTROL_ENABLED"] = "0"
|
||||
conn = _mem_conn()
|
||||
|
||||
Reference in New Issue
Block a user