import assert from 'node:assert/strict'; import test from 'node:test'; import { saveWithOptimisticRollback } from './optimistic-persistence'; test('rolls back optimistic state when the save fails and state is unchanged', async () => { const previous = [{ id: 'old' }]; const optimistic = [{ id: 'new' }]; let current = optimistic; let rolledBack = false; await assert.rejects( () => saveWithOptimisticRollback({ save: async () => { throw new Error('save failed'); }, expected: optimistic, getCurrent: () => current, rollback: () => { rolledBack = true; current = previous; }, }), /save failed/, ); assert.equal(rolledBack, true); assert.equal(current, previous); }); test('does not roll back a newer optimistic state when an older save fails', async () => { const optimistic = [{ id: 'new' }]; const newer = [{ id: 'newer' }]; let current = newer; let rolledBack = false; await assert.rejects( () => saveWithOptimisticRollback({ save: async () => { throw new Error('save failed'); }, expected: optimistic, getCurrent: () => current, rollback: () => { rolledBack = true; }, }), /save failed/, ); assert.equal(rolledBack, false); assert.equal(current, newer); });