fix: make corporate actions atomic and recoverable
Publish verified PortfolioHub image / verify (push) Canceled after 0s
Publish verified PortfolioHub image / publish (push) Canceled after 0s

This commit is contained in:
2026-09-13 19:33:07 +09:00
parent 2b470c735f
commit c7d8235bde
16 changed files with 711 additions and 94 deletions
+17
View File
@@ -44,6 +44,23 @@ def test_canonical_hash_same_payload_and_changed_payload_differ():
assert canonical_payload_hash(a) != canonical_payload_hash(b)
def test_default_resume_flag_preserves_pre_recovery_idempotency_hash():
request = CorporateActionRequest(
effective_date=date(2026, 1, 2),
quantity_before=Decimal(10),
quantity_after=Decimal(5),
evidence_ref="ev",
)
legacy_payload = request.model_dump(mode="json", exclude={"resume_partial"})
explicit_default_payload = {**legacy_payload, "resume_partial": False}
assert canonical_payload_hash(request) == canonical_payload_hash(legacy_payload)
assert canonical_payload_hash(explicit_default_payload) == canonical_payload_hash(legacy_payload)
assert canonical_payload_hash(
request.model_copy(update={"resume_partial": True})
) != canonical_payload_hash(legacy_payload)
def test_runtime_schema_has_one_corporate_action_ddl_and_replay_mapping_starts_at_18():
source = Path("app/repositories/postgres.py").read_text()
assert source.count("CREATE TABLE IF NOT EXISTS portfolio_corporate_actions") == 1