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' }); }); });