feat(v030): GitClient — fetch/rebaseOnto/rebaseAbort/hasUncommittedChanges/listConflicts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
51
tests/unit/GitClient.fetch.test.ts
Normal file
51
tests/unit/GitClient.fetch.test.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { GitClient } from '../../src/main/services/GitClient.js';
|
||||
|
||||
describe('GitClient — fetch / rebase / conflict 메서드', () => {
|
||||
let client: GitClient;
|
||||
let runSpy: ReturnType<typeof vi.spyOn>;
|
||||
|
||||
beforeEach(() => {
|
||||
client = new GitClient('/tmp/sync');
|
||||
runSpy = vi.spyOn(client, 'run');
|
||||
});
|
||||
|
||||
it('fetch — git fetch origin 호출', async () => {
|
||||
runSpy.mockResolvedValueOnce({ stdout: '', stderr: '', exitCode: 0 });
|
||||
const r = await client.fetch();
|
||||
expect(runSpy).toHaveBeenCalledWith(['fetch', 'origin']);
|
||||
expect(r.exitCode).toBe(0);
|
||||
});
|
||||
|
||||
it('rebaseOnto — git rebase origin/main', async () => {
|
||||
runSpy.mockResolvedValueOnce({ stdout: '', stderr: '', exitCode: 0 });
|
||||
const r = await client.rebaseOnto('origin/main');
|
||||
expect(runSpy).toHaveBeenCalledWith(['rebase', 'origin/main']);
|
||||
expect(r.exitCode).toBe(0);
|
||||
});
|
||||
|
||||
it('rebaseAbort — git rebase --abort', async () => {
|
||||
runSpy.mockResolvedValueOnce({ stdout: '', stderr: '', exitCode: 0 });
|
||||
await client.rebaseAbort();
|
||||
expect(runSpy).toHaveBeenCalledWith(['rebase', '--abort']);
|
||||
});
|
||||
|
||||
it('hasUncommittedChanges — git status --porcelain 의 출력 있으면 true', async () => {
|
||||
runSpy.mockResolvedValueOnce({ stdout: ' M notes/abc.md\n', stderr: '', exitCode: 0 });
|
||||
expect(await client.hasUncommittedChanges()).toBe(true);
|
||||
|
||||
runSpy.mockResolvedValueOnce({ stdout: '', stderr: '', exitCode: 0 });
|
||||
expect(await client.hasUncommittedChanges()).toBe(false);
|
||||
});
|
||||
|
||||
it('listConflicts — git diff --name-only --diff-filter=U 결과 파싱', async () => {
|
||||
runSpy.mockResolvedValueOnce({
|
||||
stdout: 'notes/aaa.md\nnotes/bbb.md\n',
|
||||
stderr: '',
|
||||
exitCode: 0
|
||||
});
|
||||
const r = await client.listConflicts();
|
||||
expect(runSpy).toHaveBeenCalledWith(['diff', '--name-only', '--diff-filter=U']);
|
||||
expect(r).toEqual(['notes/aaa.md', 'notes/bbb.md']);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user