test(dolt): anchor the real-clone smoke test to the clone, not the wall clock
The test built the importer with today=date.today() while running against a fixed local clone with do_pull=False, so its forward horizon shrank by a day per real day. It has now decayed past the initial-load gate -- 19d against the 21d MIN_FORWARD_HORIZON_DAYS floor -- and would have kept failing, worse each day. Anchors today to the clone's own calendar (max reporting date across the seeded dot-free symbols, minus 35 days, mirroring the ~35d horizon the importer's own comment cites) and uses that date in the forward-calendar assertion. Also surfaces run.error_details on failure, which is how the cause was found. Test-only. MIN_FORWARD_HORIZON_DAYS and the importer are untouched: production pulls fresh data on every run and was never affected by this. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,7 @@ from __future__ import annotations
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
from datetime import date
|
||||
from datetime import date, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
@@ -252,13 +252,29 @@ async def test_real_clone_smoke(engine):
|
||||
# A few tickers spanning near + further-out reporters so the initial-load
|
||||
# forward-horizon gate (>= 21d) is satisfied on the fixed clone.
|
||||
await _seed_tickers(factory, ["AAPL", "MSFT", "NVDA", "JPM", "BRK.B"])
|
||||
|
||||
# "today" is anchored to the clone, NOT the wall clock. The clone is fixed
|
||||
# and do_pull=False, so a wall-clock today makes this test decay: the
|
||||
# forward horizon shrinks a day per real day and eventually trips the
|
||||
# >= 21d gate (it did, at 19d). Anchoring keeps it time-stable. Production
|
||||
# pulls fresh data and is unaffected. Dot-free symbols only, so the query
|
||||
# needs no symbol normalisation.
|
||||
rows = await dolt_client.query_csv(
|
||||
_CLONE_DIR,
|
||||
"SELECT MAX(`date`) AS max_date FROM earnings_calendar "
|
||||
"WHERE act_symbol IN ('AAPL', 'MSFT', 'NVDA', 'JPM')",
|
||||
binary=_DOLT_BIN,
|
||||
)
|
||||
max_date = date.fromisoformat(rows[0]["max_date"])
|
||||
today = max_date - timedelta(days=35) # ~35d horizon, per the importer's note
|
||||
|
||||
imp = DoltEarningsImporter(
|
||||
repo_dir=_CLONE_DIR, binary=_DOLT_BIN, today=date.today(), do_pull=False, dolt=dolt_client
|
||||
repo_dir=_CLONE_DIR, binary=_DOLT_BIN, today=today, do_pull=False, dolt=dolt_client
|
||||
)
|
||||
run = await run_import(imp, engine=engine)
|
||||
|
||||
assert run.status == STATUS_PROMOTED
|
||||
assert run.status == STATUS_PROMOTED, run.error_details
|
||||
events = await _events(factory)
|
||||
assert events, "no earnings parsed from the real clone"
|
||||
assert any(e.announce_date > date.today() for e in events), "no forward calendar"
|
||||
assert any(e.announce_date > today for e in events), "no forward calendar"
|
||||
assert any(e.eps_actual is not None for e in events), "no calendar<->history pairing"
|
||||
|
||||
Reference in New Issue
Block a user