40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { execFileSync } from 'child_process';
|
|
import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { tmpdir } from 'os';
|
|
import { commitWorkspaceChanges, ensureWorkspaceGitRepo } from './workspace-manager.js';
|
|
|
|
describe('workspace-manager', () => {
|
|
it('initializes and commits a local workspace without a remote', async () => {
|
|
const root = mkdtempSync(join(tmpdir(), 'workspace-manager-test-'));
|
|
try {
|
|
mkdirSync(join(root, 'output'), { recursive: true });
|
|
mkdirSync(join(root, 'input'), { recursive: true });
|
|
writeFileSync(join(root, 'output', 'report.md'), '# report\n', 'utf-8');
|
|
writeFileSync(join(root, 'input', 'source.txt'), 'secret\n', 'utf-8');
|
|
|
|
await ensureWorkspaceGitRepo(root);
|
|
const result = await commitWorkspaceChanges({
|
|
workspacePath: root,
|
|
branchName: 'main',
|
|
commitMessage: 'agent: update task #1',
|
|
ignoreEntries: ['input/', 'logs/'],
|
|
});
|
|
|
|
expect(result.changed).toBe(true);
|
|
expect(result.committed).toBe(true);
|
|
expect(result.pushed).toBe(false);
|
|
|
|
const tracked = execFileSync('git', ['ls-files'], { cwd: root, encoding: 'utf-8' });
|
|
expect(tracked).toContain('output/report.md');
|
|
expect(tracked).not.toContain('input/source.txt');
|
|
|
|
const excludePath = join(root, '.git', 'info', 'exclude');
|
|
expect(readFileSync(excludePath, 'utf-8')).toContain('input/');
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true });
|
|
}
|
|
});
|
|
});
|