diff --git a/.tests/unit/diff.test.ts b/.tests/unit/diff.test.ts new file mode 100644 index 0000000..0cf8bda --- /dev/null +++ b/.tests/unit/diff.test.ts @@ -0,0 +1,87 @@ +import { parseDiffOutput, countDiffStats } from '../../src/utils/diff-utils'; + +describe('parseDiffOutput', () => { + it('should parse empty diff', () => { + const result = parseDiffOutput(''); + expect(result).toEqual([]); + }); + + it('should parse diff with one file', () => { + const diffOutput = `diff --git a/test.ts b/test.ts +index 1234567..89abcdef 100644 +--- a/test.ts ++++ b/test.ts +@@ -1,3 +1,4 @@ ++import { useState } from 'react'; + function App() { + return
Hello
; + } +@@ -5,3 +6,4 @@ function App() { + return
Hello
; + } ++// comment +`; + + const result = parseDiffOutput(diffOutput); + expect(result.length).toBe(1); + expect(result[0].file).toBe('test.ts'); + expect(result[0].additions).toBe(2); + expect(result[0].deletions).toBe(0); + }); + + it('should parse diff with multiple files', () => { + const diffOutput = `diff --git a/file1.ts b/file1.ts +index 1234567..89abcdef 100644 +--- a/file1.ts ++++ b/file1.ts +@@ -1,2 +1,3 @@ ++const x = 1; + line 1 + +diff --git a/file2.ts b/file2.ts +index abcdef1..2345678 100644 +--- a/file2.ts ++++ b/file2.ts +@@ -1,2 +1,2 @@ +-old line ++new line + line 2 +`; + + const result = parseDiffOutput(diffOutput); + expect(result.length).toBe(2); + expect(result[0].file).toBe('file1.ts'); + expect(result[1].file).toBe('file2.ts'); + expect(result[0].additions).toBe(1); + expect(result[1].additions).toBe(1); + expect(result[1].deletions).toBe(1); + }); +}); + +describe('countDiffStats', () => { + it('should count additions and deletions', () => { + const diffContent = `diff --git a/test.ts b/test.ts +@@ -1,3 +1,4 @@ ++import { useState } from 'react'; + function App() { + return
Hello
; + } +@@ -5,3 +6,4 @@ function App() { + return
Hello
; + } ++// comment +`; + + const stats = countDiffStats(diffContent); + expect(stats.additions).toBe(2); + expect(stats.deletions).toBe(0); + expect(stats.files).toBe(1); + }); + + it('should handle empty diff', () => { + const stats = countDiffStats(''); + expect(stats.additions).toBe(0); + expect(stats.deletions).toBe(0); + expect(stats.files).toBe(1); + }); +});