fix(sec): defer expected Company Facts lag without alerting

This commit is contained in:
2026-07-31 12:40:29 +02:00
parent 862d1d536b
commit f58f8b0818
7 changed files with 88 additions and 10 deletions
+18 -1
View File
@@ -29,6 +29,7 @@ from app.models.data_import_run import DataImportRun
from app.models.fundamental_snapshot import FundamentalSnapshot
from app.models.system_event import SystemEvent
from app.services.data_import import (
STATUS_DEFERRED,
STATUS_FAILED,
STATUS_NO_OP,
STATUS_PROMOTED,
@@ -67,9 +68,10 @@ class FakeImporter:
source = "sec_facts"
def __init__(self, revision, *, ok=True, n_rows=3, raise_in="none"):
def __init__(self, revision, *, ok=True, retryable=False, n_rows=3, raise_in="none"):
self.revision = revision
self.ok = ok
self.retryable = retryable
self.n_rows = n_rows
self.raise_in = raise_in
self.staged_called = False
@@ -94,6 +96,7 @@ class FakeImporter:
summary={"staged_rows": len(staged)},
source_max_date=date(2026, 7, 21),
messages=[] if self.ok else ["coverage below threshold"],
retryable=self.retryable,
)
async def promote(self, db, staged, run_id):
@@ -200,6 +203,20 @@ async def test_failed_validation_leaves_data_untouched(engine):
assert await _count(factory, SystemEvent) == 1 # alerted
async def test_retryable_validation_defers_without_alerting(engine):
factory = _factory(engine)
await run_import(FakeImporter("rev1", n_rows=3), engine=engine)
run = await run_import(
FakeImporter("rev2", ok=False, retryable=True, n_rows=5), engine=engine
)
assert run is not None and run.status == STATUS_DEFERRED
assert "coverage" in (run.error_details or "")
assert await _count(factory, FundamentalSnapshot) == 3 # untouched
assert await _count(factory, SystemEvent) == 0 # expected retry does not alert
async def test_exception_in_promote_rolls_back(engine):
factory = _factory(engine)
await run_import(FakeImporter("rev1", n_rows=3), engine=engine) # baseline