diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-17 14:32:37 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-17 14:32:37 +0800 |
| commit | 5c0ba37eda80d39e6ceca59bb1d5f4942f858995 (patch) | |
| tree | 948723f9cedf7ccb0707fa6ee516bd30fe20fd10 /frontend/src/lib/draftGuard.test.ts | |
| download | strategy-lab-5c0ba37eda80d39e6ceca59bb1d5f4942f858995.tar.gz | |
chore: establish Strategy Lab source baseline (development, not release)
Diffstat (limited to 'frontend/src/lib/draftGuard.test.ts')
| -rw-r--r-- | frontend/src/lib/draftGuard.test.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/frontend/src/lib/draftGuard.test.ts b/frontend/src/lib/draftGuard.test.ts new file mode 100644 index 0000000..a18de48 --- /dev/null +++ b/frontend/src/lib/draftGuard.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from 'vitest'; +import { unifiedDiffStats, ConflictResolver } from './draftGuard'; + +describe('unifiedDiffStats', () => { + it('counts added and removed lines', () => { + const s = unifiedDiffStats('a\nb\n', 'a\nc\nd\n'); + expect(s.added).toBe(2); + expect(s.removed).toBe(1); + }); + + it('is zero for identical inputs', () => { + const s = unifiedDiffStats('same', 'same'); + expect(s.added).toBe(0); + expect(s.removed).toBe(0); + }); +}); + +describe('ConflictResolver', () => { + const local = { generation: 1, code: 'x = 1\n' }; + + it('flags stale response: server generation ahead of local base', () => { + const r = new ConflictResolver(local); + const verdict = r.onServerState({ generation: 2, code: 'x = 2\n' }, local.generation); + expect(verdict.stale).toBe(true); + }); + + it('not stale when server generation equals local base generation', () => { + const r = new ConflictResolver(local); + const verdict = r.onServerState({ generation: 1, code: 'x = 1\n' }, local.generation); + expect(verdict.stale).toBe(false); + }); + + it('force-overwrite plan uses server generation to retry save', () => { + const r = new ConflictResolver(local); + const plan = r.retryPlan({ generation: 2, code: 'x = 2\n' } as const); + expect(plan).toEqual({ generation: 2, code: 'x = 1\n' }); + }); +}); |
