M8-R03B: keep meter swap recompute in caller transaction

This commit is contained in:
2026-08-24 06:45:31 +02:00
parent 631b14e2ec
commit 3beeb5a461
4 changed files with 105 additions and 19 deletions
+26
View File
@@ -2176,6 +2176,32 @@ class TestComputeClosedPeriods:
class TestRecomputeRange:
def test_default_commit_is_visible_to_a_new_session(self, energy_db: Session) -> None:
"""The public recompute API retains its standalone commit behaviour."""
_setup_manual_scenario(energy_db)
assert recompute_range(energy_db, _T0, _T1) == 1
assert energy_db.bind is not None
with Session(energy_db.bind) as observer:
row = observer.execute(
select(EnergyCostPeriod).where(EnergyCostPeriod.period_start == _T0)
).scalar_one()
assert row.degraded is False
def test_commit_false_leaves_recompute_for_caller_to_rollback(self, energy_db: Session) -> None:
"""Caller-owned recompute writes disappear entirely after rollback."""
_setup_manual_scenario(energy_db)
assert recompute_range(energy_db, _T0, _T1, commit=False) == 1
energy_db.rollback()
assert energy_db.bind is not None
with Session(energy_db.bind) as observer:
rows = observer.execute(
select(EnergyCostPeriod).where(EnergyCostPeriod.period_start == _T0)
).scalars().all()
assert rows == []
def test_overwrites_existing_rows(self, energy_db: Session) -> None:
"""recompute_range must overwrite non-degraded rows (explicit opt-in)."""
contract = _make_contract(energy_db, kind="manual", active=True)