feat: daily volume top20 rank per exchange in market page
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
from datetime import datetime
|
||||
|
||||
from hub_volume_rank_lib import (
|
||||
cache_needs_refresh,
|
||||
format_volume_quote,
|
||||
merge_exchange_rank,
|
||||
rank_date_label,
|
||||
)
|
||||
|
||||
|
||||
def test_rank_date_label_after_reset():
|
||||
# 2026-06-08 09:00 北京时间 → 昨日交易日 2026-06-07
|
||||
dt = datetime(2026, 6, 8, 9, 0, 0)
|
||||
assert rank_date_label(now=dt, reset_hour=8) == "2026-06-07"
|
||||
|
||||
|
||||
def test_rank_date_label_before_reset():
|
||||
# 2026-06-08 07:00 → 当前交易日仍算 2026-06-07,昨日为 2026-06-06
|
||||
dt = datetime(2026, 6, 8, 7, 0, 0)
|
||||
assert rank_date_label(now=dt, reset_hour=8) == "2026-06-06"
|
||||
|
||||
|
||||
def test_format_volume_quote():
|
||||
assert format_volume_quote(1_500_000_000) == "1.50B"
|
||||
assert format_volume_quote(2_300_000) == "2.30M"
|
||||
assert format_volume_quote(4500) == "4.50K"
|
||||
|
||||
|
||||
def test_cache_needs_refresh_and_merge():
|
||||
cache = {"rank_date": "2026-06-05", "exchanges": {}}
|
||||
assert cache_needs_refresh(cache, expected_rank_date="2026-06-07") is True
|
||||
merged = merge_exchange_rank(
|
||||
cache,
|
||||
"binance",
|
||||
{
|
||||
"ok": True,
|
||||
"rank_date": "2026-06-07",
|
||||
"items": [{"rank": 1, "symbol": "BTC/USDT", "volume_quote": 1.0}],
|
||||
"total_symbols": 100,
|
||||
},
|
||||
)
|
||||
assert merged["exchanges"]["binance"]["items"][0]["symbol"] == "BTC/USDT"
|
||||
assert merged["rank_date"] == "2026-06-07"
|
||||
Reference in New Issue
Block a user