diff --git a/backend/app/api/settings.py b/backend/app/api/settings.py index 7f31977..bb3af65 100644 --- a/backend/app/api/settings.py +++ b/backend/app/api/settings.py @@ -1486,7 +1486,7 @@ def update_quote_interval(req: QuoteIntervalIn, request: Request) -> dict: """更新行情轮询间隔。按档位自动 clamp。""" qs = getattr(request.app.state, "quote_service", None) if not qs: - return {"interval": req.interval, "min_interval": qs.get_min_interval(), "max_interval": 60.0} + return {"interval": req.interval, "min_interval": 6.0, "max_interval": 60.0} clamped = qs.set_interval(req.interval) return { "interval": clamped, diff --git a/backend/tests/test_quote_interval_settings.py b/backend/tests/test_quote_interval_settings.py new file mode 100644 index 0000000..b717c78 --- /dev/null +++ b/backend/tests/test_quote_interval_settings.py @@ -0,0 +1,29 @@ +"""行情轮询间隔接口: quote_service 缺失时的兜底分支不能抛 AttributeError (issue #261)。""" + +from __future__ import annotations + +from types import SimpleNamespace + +from app.api.settings import QuoteIntervalIn, update_quote_interval + + +def _request_without_quote_service() -> SimpleNamespace: + return SimpleNamespace(app=SimpleNamespace(state=SimpleNamespace(quote_service=None))) + + +def test_update_quote_interval_without_service_returns_defaults(): + result = update_quote_interval( + QuoteIntervalIn(interval=6.0), request=_request_without_quote_service() + ) + + assert result == {"interval": 6.0, "min_interval": 6.0, "max_interval": 60.0} + + +def test_update_quote_interval_without_service_keeps_requested_interval(): + result = update_quote_interval( + QuoteIntervalIn(interval=12.0), request=_request_without_quote_service() + ) + + assert result["interval"] == 12.0 + assert result["min_interval"] == 6.0 + assert result["max_interval"] == 60.0