fix(data): 增加全局保存失败保护
This commit is contained in:
53
apps/web/lib/optimistic-persistence.test.ts
Normal file
53
apps/web/lib/optimistic-persistence.test.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user