mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 20:14:16 +08:00
fix: 完善自定义分钟数据源配置与异常处理
- 补齐资产类型和周期参数在 API、YAML 与前端编辑器中的保存回读 - 权限判断和分时监控统一复用安全的数据源解析边界 - 增加配置往返及解析异常回归测试
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
from app.api.settings import DatasetConfigIn
|
||||
from app.data_providers.custom.config import CustomSourceConfig, _dataset_from_dict
|
||||
from app.data_providers.custom.loader import _config_to_dict, _sanitize_for_yaml
|
||||
|
||||
|
||||
def test_minute_request_parameter_names_survive_config_round_trip():
|
||||
dataset = DatasetConfigIn(
|
||||
url="https://example.test/minute",
|
||||
method="GET",
|
||||
asset_type_param="asset",
|
||||
freq_param="period",
|
||||
).model_dump()
|
||||
|
||||
cleaned = _sanitize_for_yaml({
|
||||
"name": "test_source",
|
||||
"display_name": "Test Source",
|
||||
"datasets": {"minute": dataset},
|
||||
})
|
||||
parsed = _dataset_from_dict(cleaned["datasets"]["minute"])
|
||||
exposed = _config_to_dict(CustomSourceConfig(
|
||||
name="test_source",
|
||||
display_name="Test Source",
|
||||
datasets={"minute": parsed},
|
||||
))
|
||||
|
||||
assert parsed.asset_type_param == "asset"
|
||||
assert parsed.freq_param == "period"
|
||||
assert exposed["datasets"]["minute"]["asset_type_param"] == "asset"
|
||||
assert exposed["datasets"]["minute"]["freq_param"] == "period"
|
||||
@@ -639,3 +639,44 @@ def test_resolve_minute_provider_success_returns_provider(monkeypatch):
|
||||
assert provider is mock_provider
|
||||
assert fallback is False
|
||||
assert err is None
|
||||
|
||||
|
||||
def test_minute_allowed_resolver_exception_returns_false(monkeypatch):
|
||||
"""权限入口复用安全 resolver, 插件注册异常不再穿透为 500。"""
|
||||
from app.api import kline as kline_api
|
||||
from app.tickflow.capabilities import CapabilitySet
|
||||
|
||||
monkeypatch.setattr(
|
||||
"app.services.preferences.get_minute_data_provider",
|
||||
lambda: "broken",
|
||||
)
|
||||
|
||||
def _raising(name, dataset):
|
||||
raise RuntimeError("registry corrupted")
|
||||
|
||||
monkeypatch.setattr("app.data_providers.custom.provider_has_dataset", _raising)
|
||||
|
||||
assert kline_api._minute_allowed(CapabilitySet()) is False
|
||||
|
||||
|
||||
def test_intraday_monitor_support_resolver_exception_falls_back(monkeypatch):
|
||||
"""监控入口解析自定义源失败后继续按 TickFlow 能力判断。"""
|
||||
from app.tickflow.capabilities import Cap, CapabilitySet
|
||||
|
||||
monkeypatch.setattr(
|
||||
kline_sync.preferences,
|
||||
"get_minute_data_provider",
|
||||
lambda: "broken",
|
||||
)
|
||||
|
||||
def _raising(name, dataset):
|
||||
raise RuntimeError("registry corrupted")
|
||||
|
||||
monkeypatch.setattr("app.data_providers.custom.provider_has_dataset", _raising)
|
||||
capset = CapabilitySet()
|
||||
capset.grant(Cap.KLINE_MINUTE_BATCH)
|
||||
|
||||
support = kline_sync.intraday_monitor_support(capset)
|
||||
|
||||
assert support["available"] is True
|
||||
assert support["source"] == "minute_batch"
|
||||
|
||||
Reference in New Issue
Block a user