|
|
|
@ -149,3 +149,23 @@ class TestAnalysisMigration:
|
|
|
|
|
|
|
|
|
|
|
|
assert result is True
|
|
|
|
assert result is True
|
|
|
|
mock_write.assert_called_once_with({"ai_analysis_cache": [{"id": 1, "symbol": "AG2606"}]})
|
|
|
|
mock_write.assert_called_once_with({"ai_analysis_cache": [{"id": 1, "symbol": "AG2606"}]})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_analysis_db_falls_back_to_sqlite_when_mysql_session_fails(self):
|
|
|
|
|
|
|
|
"""MySQL Session 创建失败时降级到 SQLite。"""
|
|
|
|
|
|
|
|
from app.analysis_db import get_analysis_db
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mysql_session_maker = MagicMock(side_effect=RuntimeError("MySQL 连接失败"))
|
|
|
|
|
|
|
|
sqlite_session = MagicMock()
|
|
|
|
|
|
|
|
sqlite_session_maker = MagicMock(return_value=sqlite_session)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with patch("app.analysis_db.MySQLSessionLocal", mysql_session_maker):
|
|
|
|
|
|
|
|
with patch("app.analysis_db.AnalysisSessionLocal", sqlite_session_maker):
|
|
|
|
|
|
|
|
with patch("app.analysis_db.get_storage_manager") as mock_sm:
|
|
|
|
|
|
|
|
sm = MagicMock()
|
|
|
|
|
|
|
|
sm.check_mysql.return_value = True
|
|
|
|
|
|
|
|
mock_sm.return_value = sm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
db = next(get_analysis_db())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert db is sqlite_session
|
|
|
|
|
|
|
|
mysql_session_maker.assert_called_once()
|
|
|
|
|