mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 17:54:15 +08:00
- tickflow SDK 0.1.25: intraday.universe 标的池单请求拉全市场当日分钟 - 新能力位 Cap.INTRADAY_UNIVERSE (TickFlow Expert 专有) + 探测/别名/schema v6 - 分钟刷新两阶段: 冷启动与缺口修复走 intraday_batch 全天突发(分块容错), 稳态走 universe 增量 - 覆盖看门狗: 落后>3min / 无数据 / 连续空轮自动升级全量自愈 - 刷新间隔钳制 [3,300]s 默认 6s; 监控页全量分钟开关与状态入口 - CONTRIBUTING: 分钟 K 北京时间墙钟契约 (naive, 入口强制归一)
63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
"""分钟源历史深度能力 (minute_history_days) 契约测试。
|
|
|
|
provider 可选类属性 minute_history_days 声明 1 分钟历史深度(交易日):
|
|
- stock-sdk = 5 (免费分时接口仅保留最近 5 个交易日)
|
|
- 未声明 / 走 tickflow → None (深历史)
|
|
preferences GET 带出该字段, 前端分时档位据此收窄 (浅源默认 5日, 深源默认 20日)。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from types import SimpleNamespace
|
|
|
|
from app.api import settings
|
|
from app.services import preferences
|
|
|
|
|
|
def _mock_resolver(monkeypatch, provider, fallback, err=None):
|
|
monkeypatch.setattr(
|
|
"app.services.kline_sync._resolve_minute_provider",
|
|
lambda name: (provider, fallback, err),
|
|
)
|
|
|
|
|
|
def test_stocksdk_declares_five_day_history():
|
|
from app.plugins.stocksdk.provider import StockSDKProvider
|
|
|
|
assert StockSDKProvider.minute_history_days == 5
|
|
|
|
|
|
def test_history_days_from_custom_provider(monkeypatch):
|
|
"""自定义浅源 → 声明值; 前端据此只显示 1/5 日档。"""
|
|
_mock_resolver(monkeypatch, SimpleNamespace(minute_history_days=5), False)
|
|
monkeypatch.setattr(preferences, "get_minute_data_provider", lambda: "stocksdk")
|
|
assert settings._minute_history_days() == 5
|
|
|
|
|
|
def test_history_days_none_for_undeclared_provider(monkeypatch):
|
|
"""未声明的自定义源 → None (深历史基准)。"""
|
|
_mock_resolver(monkeypatch, SimpleNamespace(), False)
|
|
monkeypatch.setattr(preferences, "get_minute_data_provider", lambda: "my_source")
|
|
assert settings._minute_history_days() is None
|
|
|
|
|
|
def test_history_days_none_for_tickflow(monkeypatch):
|
|
"""tickflow (回退路径) → None (深历史)。"""
|
|
_mock_resolver(monkeypatch, None, True)
|
|
monkeypatch.setattr(preferences, "get_minute_data_provider", lambda: "tickflow")
|
|
assert settings._minute_history_days() is None
|
|
|
|
|
|
def test_history_days_none_when_resolver_fails(monkeypatch):
|
|
"""resolver 异常 (registry 损坏) → 降级 None, 不抛 500。"""
|
|
_mock_resolver(monkeypatch, None, True, err="registry broken")
|
|
monkeypatch.setattr(preferences, "get_minute_data_provider", lambda: "stocksdk")
|
|
assert settings._minute_history_days() is None
|
|
|
|
|
|
def test_preferences_get_includes_history_days(monkeypatch):
|
|
"""GET /preferences 响应包含 minute_history_days 字段。"""
|
|
_mock_resolver(monkeypatch, SimpleNamespace(minute_history_days=5), False)
|
|
payload = settings.get_preferences()
|
|
assert payload["minute_history_days"] == 5
|
|
assert "minute_data_provider" in payload
|