import assert from 'node:assert/strict'; import { applyLendingCommand, LENDING_REQUEST, lendingSnapshot, } from './lending-lab-model'; const lost = lendingSnapshot('duplicate', 3).state; assert.equal(lost.client, 'uncertain'); assert.equal(lost.reservation?.id, 'R-001'); const replayed = lendingSnapshot('duplicate', 6).state; assert.equal(replayed.client, 'confirmed'); assert.deepEqual(replayed.reservation, lost.reservation); assert.deepEqual(replayed.outbox, lost.outbox); const changed = applyLendingCommand(lost, { type: 'receive', request: { ...LENDING_REQUEST, member: 'member-18' }, }); const rejected = applyLendingCommand(changed, { type: 'commit' }); assert.deepEqual(rejected.reply, { kind: 'key-conflict' }); assert.deepEqual(rejected.reservation, lost.reservation); const timeout = lendingSnapshot('timeout', 5).state; assert.equal(timeout.client, 'confirmed'); assert.equal(timeout.outbox?.status, 'uncertain'); console.log('Replay, payload conflict and notification checks passed.');