test: match non-null fee source hash serialization

This commit is contained in:
2026-10-03 09:10:34 +08:00
parent 4968745764
commit 588227f181
3 changed files with 52 additions and 7 deletions
+6 -2
View File
@@ -259,10 +259,14 @@ def fee_event(scope, action):
row = rows[0]
payload = json.loads(row['envelopeJson'], parse_float=decimal.Decimal, parse_int=decimal.Decimal)['payload']
row['payloadCanonicalJson'] = fee_canonical(payload)
unsigned = {**payload, 'action': None, 'sourceStatus': 'ACTIVE', 'sourceHash': None}
# The shared NON_NULL ObjectMapper omits these unsigned DTO fields.
unsigned = {key: value for key, value in payload.items() if key not in ('action', 'sourceHash')}
unsigned['sourceStatus'] = 'ACTIVE'
row['sourceCanonicalJson'] = fee_canonical(unsigned)
if hashlib.sha256(row['payloadCanonicalJson'].encode()).hexdigest() != row['payloadHash'].removeprefix('sha256:') or payload.get('sourceHash') != 'sha256:' + hashlib.sha256(row['sourceCanonicalJson'].encode()).hexdigest():
if hashlib.sha256(row['payloadCanonicalJson'].encode()).hexdigest() != row['payloadHash'].removeprefix('sha256:'):
raise RuntimeError('FEE_PAYLOAD_HASH_MISMATCH')
if payload.get('sourceHash') != 'sha256:' + hashlib.sha256(row['sourceCanonicalJson'].encode()).hexdigest():
raise RuntimeError('FEE_SOURCE_HASH_MISMATCH')
if row['customerId'] != scope['customerId'] or row['aggregateId'] != scope['sourceFeeId'] or row['aggregateType'] != scope['sourceType']:
raise RuntimeError('FEE_EVENT_SCOPE_MISMATCH')
if payload.get('sourceSystem') != 'LASTLEG' or payload.get('customerId') != scope['customerId'] or payload.get('sourceFeeId') != scope['sourceFeeId'] or str(payload.get('sourceVersion')) != scope['sourceVersion'] or payload.get('sourceType') != scope['sourceType'] or payload.get('action') != action: