Files
ForgeFlow/tests/git-status.test.mjs
T
2026-07-24 20:29:23 +02:00

35 lines
1.2 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import gitStatus from '../src/shared/git-status.cjs';
const { parsePorcelainV2 } = gitStatus;
test('parses branch metadata and ordinary changes', () => {
const output = [
'# branch.oid 0123456789abcdef',
'# branch.head main',
'# branch.upstream origin/main',
'# branch.ab +2 -1',
'1 .M N... 100644 100644 100644 abc def src/main.js',
'1 M. N... 100644 100644 100644 abc def README.md',
'? new file.txt',
''
].join('\0');
const parsed = parsePorcelainV2(output);
assert.equal(parsed.branch.head, 'main');
assert.equal(parsed.branch.ahead, 2);
assert.equal(parsed.branch.behind, 1);
assert.equal(parsed.counts.changed, 3);
assert.equal(parsed.counts.staged, 1);
assert.equal(parsed.counts.untracked, 1);
assert.equal(parsed.files[0].path, 'src/main.js');
});
test('parses rename records with original path', () => {
const output = '2 R. N... 100644 100644 100644 abc def R100 src/new.js\0src/old.js\0';
const parsed = parsePorcelainV2(output);
assert.equal(parsed.files[0].path, 'src/new.js');
assert.equal(parsed.files[0].originalPath, 'src/old.js');
assert.equal(parsed.files[0].status, 'renamed');
});