"""hub_trades_lib 单元测试。""" from __future__ import annotations import sqlite3 import unittest from hub_trades_lib import fetch_trades_for_trading_day, summarize_trades, trading_day_from_dt from datetime import datetime class HubTradesLibTest(unittest.TestCase): def test_trading_day_reset(self): dt = datetime(2026, 6, 6, 7, 30, 0) self.assertEqual(trading_day_from_dt(dt, 8), "2026-06-05") dt2 = datetime(2026, 6, 6, 8, 0, 0) self.assertEqual(trading_day_from_dt(dt2, 8), "2026-06-06") def test_fetch_and_summarize(self): conn = sqlite3.connect(":memory:") conn.row_factory = sqlite3.Row conn.execute( """CREATE TABLE trade_records ( symbol TEXT, exchange_symbol TEXT, direction TEXT, result TEXT, pnl_amount REAL, closed_at TEXT, opened_at TEXT, session_date TEXT, monitor_type TEXT, actual_rr REAL, planned_rr REAL, trade_style TEXT, entry_reason TEXT )""" ) conn.execute( "INSERT INTO trade_records VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", ( "ONDO/USDT", "ONDO/USDT:USDT", "short", "止损", -0.5, "2026-06-06 10:00:00", "2026-06-06 09:00:00", "2026-06-06", "趋势回调", None, None, "trend", "", ), ) conn.commit() rows = fetch_trades_for_trading_day(conn, "2026-06-06") self.assertEqual(len(rows), 1) stats = summarize_trades(rows) self.assertEqual(stats["closed_count"], 1) self.assertEqual(stats["loss_count"], 1) self.assertAlmostEqual(stats["total_pnl_u"], -0.5) conn.close() if __name__ == "__main__": unittest.main()