test: match non-null fee source hash serialization
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user