feat: sync latest ARR implementation
This commit is contained in:
@@ -148,7 +148,7 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
connect=lambda _dsn: connection,
|
||||
)
|
||||
|
||||
snapshot = repository.load_snapshot(2026, 7, date(2026, 7, 26))
|
||||
snapshot = repository.load_snapshot(2026, 7, date(2026, 7, 2))
|
||||
|
||||
self.assertTrue(connection.closed)
|
||||
self.assertEqual(snapshot.facts[0].daily_record_id, 501)
|
||||
@@ -159,6 +159,33 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
executed = " ".join(sql for sql, _params in connection.cursor_instance.calls)
|
||||
self.assertIn("REPEATABLE READ READ ONLY", executed)
|
||||
self.assertIn("finance.v_active_daily_facts", executed)
|
||||
self.assertIn("facts.arrival BETWEEN", executed)
|
||||
|
||||
def test_daily_event_scope_uses_arrival_and_month_maximum(self):
|
||||
def handler(sql: str, _params: Optional[Sequence[Any]]):
|
||||
if sql == "SELECT current_database()":
|
||||
return [("booking_test",)], 1
|
||||
if "SELECT min(record.arrival), max(record.arrival)" in sql:
|
||||
return [(date(2026, 7, 21), date(2026, 7, 21))], 1
|
||||
if "SELECT max(fact.arrival)" in sql:
|
||||
return [(date(2026, 7, 27),)], 1
|
||||
return [], 0
|
||||
|
||||
connection = FakeConnection(handler)
|
||||
repository = PostgresReportRepository(
|
||||
DatabaseConfig("postgresql://synthetic"),
|
||||
connect=lambda _dsn: connection,
|
||||
)
|
||||
|
||||
request = repository.derive_monthly_request(4)
|
||||
|
||||
self.assertIsNotNone(request)
|
||||
self.assertEqual(request.report_year, 2026)
|
||||
self.assertEqual(request.report_month, 7)
|
||||
self.assertEqual(request.as_of_date, date(2026, 7, 27))
|
||||
executed = " ".join(sql for sql, _params in connection.cursor_instance.calls)
|
||||
self.assertIn("record.arrival", executed)
|
||||
self.assertIn("fact.arrival", executed)
|
||||
|
||||
def test_reservation_freezes_daily_and_channel_manifests(self):
|
||||
snapshot_connection = FakeConnection(
|
||||
@@ -194,8 +221,8 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
report = build_monthly_report(
|
||||
2026,
|
||||
7,
|
||||
date(2026, 7, 26),
|
||||
repository.load_snapshot(2026, 7, date(2026, 7, 26)),
|
||||
date(2026, 7, 2),
|
||||
repository.load_snapshot(2026, 7, date(2026, 7, 2)),
|
||||
)
|
||||
|
||||
def reserve_handler(sql: str, _params: Optional[Sequence[Any]]):
|
||||
@@ -203,6 +230,12 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
return [("booking_test",)], 1
|
||||
if "FROM finance.current_daily_versions" in sql:
|
||||
return [(date(2026, 7, 2), 102)], 1
|
||||
if "FROM reporting.monthly_runs AS run" in sql:
|
||||
return [], 0
|
||||
if "SELECT COALESCE(max(version_no), 0) + 1" in sql:
|
||||
return [(2,)], 1
|
||||
if "INSERT INTO reporting.monthly_runs" in sql:
|
||||
return [(44,)], 1
|
||||
return [], 1
|
||||
|
||||
reserve_connection = FakeConnection(reserve_handler)
|
||||
@@ -212,20 +245,21 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
)
|
||||
reservation = repository.reserve_report(report)
|
||||
|
||||
self.assertGreater(reservation.report_version_id, 0)
|
||||
self.assertEqual(
|
||||
reservation.report_version_id,
|
||||
reservation.version_no,
|
||||
)
|
||||
self.assertEqual(reservation.report_version_id, 44)
|
||||
self.assertEqual(reservation.version_no, 2)
|
||||
self.assertEqual(reservation.period_start, date(2026, 7, 1))
|
||||
self.assertEqual(reservation.as_of_date, date(2026, 7, 26))
|
||||
self.assertEqual(reservation.as_of_date, date(2026, 7, 2))
|
||||
self.assertEqual(reservation.daily_versions, report.daily_versions)
|
||||
self.assertRegex(reservation.source_snapshot_sha256 or "", r"^[0-9a-f]{64}$")
|
||||
self.assertTrue(reserve_connection.closed)
|
||||
self.assertEqual(len(reserve_connection.cursor_instance.many_calls), 0)
|
||||
executed = " ".join(
|
||||
sql for sql, _params in reserve_connection.cursor_instance.calls
|
||||
)
|
||||
self.assertNotIn("finance.report_versions", executed)
|
||||
self.assertIn("INSERT INTO reporting.monthly_runs", executed)
|
||||
self.assertIn("INSERT INTO reporting.monthly_run_daily_versions", executed)
|
||||
self.assertIn("INSERT INTO reporting.monthly_channel_manifest", executed)
|
||||
|
||||
def test_stale_snapshot_is_rejected_before_version_insert(self):
|
||||
from monthly_reports.contracts import (
|
||||
@@ -251,7 +285,7 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
report = build_monthly_report(
|
||||
2026,
|
||||
7,
|
||||
date(2026, 7, 26),
|
||||
date(2026, 7, 2),
|
||||
MonthlySnapshot(
|
||||
(source,),
|
||||
(DailyVersionPin(date(2026, 7, 2), 102),),
|
||||
@@ -281,13 +315,20 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
)
|
||||
)
|
||||
|
||||
def test_activation_rechecks_pins_without_persisting_monthly_rows(self):
|
||||
def handler(sql: str, _params: Optional[Sequence[Any]]):
|
||||
def test_activation_registers_artifacts_and_supersedes_atomically(self):
|
||||
def handler(sql: str, params: Optional[Sequence[Any]]):
|
||||
if sql == "SELECT current_database()":
|
||||
return [("booking_test",)], 1
|
||||
if "FROM finance.current_daily_versions" in sql:
|
||||
return [(date(2026, 7, 2), 102)], 1
|
||||
return [], 0
|
||||
if "SELECT report_status, source_snapshot_sha256" in sql:
|
||||
return [("reserved", "c" * 64)], 1
|
||||
if "FROM ingestion.artifacts" in sql:
|
||||
return [], 0
|
||||
if "INSERT INTO ingestion.artifacts" in sql:
|
||||
artifact_id = 701 if params and params[0] == "monthly_xlsx" else 702
|
||||
return [(artifact_id,)], 1
|
||||
return [], 1
|
||||
|
||||
connection = FakeConnection(handler)
|
||||
repository = PostgresReportRepository(
|
||||
@@ -299,8 +340,9 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
44,
|
||||
44,
|
||||
date(2026, 7, 1),
|
||||
date(2026, 7, 26),
|
||||
date(2026, 7, 2),
|
||||
(DailyVersionPin(date(2026, 7, 2), 102),),
|
||||
"c" * 64,
|
||||
),
|
||||
FileMetadata(
|
||||
"monthly_xlsx",
|
||||
@@ -318,11 +360,16 @@ class MonthlyReportsRepositoryTests(unittest.TestCase):
|
||||
50,
|
||||
"application/json",
|
||||
),
|
||||
"d" * 64,
|
||||
)
|
||||
|
||||
self.assertTrue(connection.closed)
|
||||
executed = " ".join(sql for sql, _params in connection.cursor_instance.calls)
|
||||
self.assertIn("finance.current_daily_versions", executed)
|
||||
self.assertEqual(executed.count("INSERT INTO ingestion.artifacts"), 2)
|
||||
self.assertIn("SET report_status = 'superseded'", executed)
|
||||
self.assertIn("SET report_status = 'active'", executed)
|
||||
self.assertIn("workbook_artifact_id", executed)
|
||||
self.assertNotIn("finance.report_versions", executed)
|
||||
self.assertNotIn("booking.file_objects", executed)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user