fix: refresh latest regime trading session
This commit is contained in:
@@ -169,6 +169,59 @@ async def test_prior_v2_snapshot_is_immutable_without_explicit_rebuild(db_sessio
|
||||
assert row.total_score == 10.0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_routine_can_refresh_latest_trading_session_after_civil_day_rolls(
|
||||
monkeypatch,
|
||||
):
|
||||
latest_date = date(2020, 1, 3)
|
||||
config = copy.deepcopy(DEFAULT_CONFIG)
|
||||
prices = {
|
||||
"SMH": [(latest_date, 100.0)],
|
||||
"QQQ": [(latest_date, 100.0)],
|
||||
"SPY": [(latest_date, 100.0)],
|
||||
}
|
||||
rewrites: list[bool] = []
|
||||
|
||||
async def fake_config(_db):
|
||||
return config
|
||||
|
||||
async def fake_overrides(_db):
|
||||
return {"locked": True, "fetched_at": None, "effective_date": None}
|
||||
|
||||
async def fake_prices(_config, _start, _end):
|
||||
return prices
|
||||
|
||||
async def fake_fred(_series_id, _start, _end):
|
||||
return None
|
||||
|
||||
async def fake_breadth(_db, _symbols, window, min_tickers):
|
||||
return {}, {}
|
||||
|
||||
async def fake_latest(_db):
|
||||
return object(), {"methodology": "v2"}
|
||||
|
||||
async def fake_upsert(_db, result, *, rewrite_existing_v2):
|
||||
rewrites.append(rewrite_existing_v2)
|
||||
return True, result
|
||||
|
||||
class FakeDB:
|
||||
async def commit(self):
|
||||
return None
|
||||
|
||||
monkeypatch.setattr(rms, "get_regime_config", fake_config)
|
||||
monkeypatch.setattr(rms, "get_fundamental_overrides", fake_overrides)
|
||||
monkeypatch.setattr(rms, "_fetch_prices", fake_prices)
|
||||
monkeypatch.setattr(rms, "_fetch_fred_series", fake_fred)
|
||||
monkeypatch.setattr(rms.breadth_service, "compute_breadth_details", fake_breadth)
|
||||
monkeypatch.setattr(rms, "_latest_v2_row", fake_latest)
|
||||
monkeypatch.setattr(rms, "_upsert_snapshot", fake_upsert)
|
||||
|
||||
result = await rms.update_regime_monitor(FakeDB())
|
||||
|
||||
assert result["date"] == latest_date.isoformat()
|
||||
assert rewrites == [True]
|
||||
|
||||
|
||||
def test_compute_index_uses_one_max_price_vote_and_has_no_combined_score():
|
||||
end = date(2026, 6, 26)
|
||||
rising = [100.0 + index * 0.2 for index in range(700)]
|
||||
|
||||
Reference in New Issue
Block a user