mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-30 06:12:03 +00:00
- Updated test repository creation functions to utilize environment variables for git author and committer information, preventing modifications to the user's global git configuration. - This change enhances test isolation and ensures consistent behavior across different environments.
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import { describe, it, expect, vi, afterEach } from 'vitest';
|
|
import { createCreateHandler } from '@/routes/worktree/routes/create.js';
|
|
import { AUTOMAKER_INITIAL_COMMIT_MESSAGE } from '@/routes/worktree/common.js';
|
|
import { exec } from 'child_process';
|
|
import { promisify } from 'util';
|
|
import * as fs from 'fs/promises';
|
|
import * as os from 'os';
|
|
import * as path from 'path';
|
|
|
|
const execAsync = promisify(exec);
|
|
|
|
describe('worktree create route - repositories without commits', () => {
|
|
let repoPath: string | null = null;
|
|
|
|
async function initRepoWithoutCommit() {
|
|
repoPath = await fs.mkdtemp(path.join(os.tmpdir(), 'automaker-no-commit-'));
|
|
await execAsync('git init', { cwd: repoPath });
|
|
// Don't set git config - use environment variables in commit operations instead
|
|
// to avoid affecting user's git config
|
|
// Intentionally skip creating an initial commit
|
|
}
|
|
|
|
afterEach(async () => {
|
|
if (!repoPath) {
|
|
return;
|
|
}
|
|
await fs.rm(repoPath, { recursive: true, force: true });
|
|
repoPath = null;
|
|
});
|
|
|
|
it('creates an initial commit before adding a worktree when HEAD is missing', async () => {
|
|
await initRepoWithoutCommit();
|
|
const handler = createCreateHandler();
|
|
|
|
const json = vi.fn();
|
|
const status = vi.fn().mockReturnThis();
|
|
const req = {
|
|
body: { projectPath: repoPath, branchName: 'feature/no-head' },
|
|
} as any;
|
|
const res = {
|
|
json,
|
|
status,
|
|
} as any;
|
|
|
|
await handler(req, res);
|
|
|
|
expect(status).not.toHaveBeenCalled();
|
|
expect(json).toHaveBeenCalled();
|
|
const payload = json.mock.calls[0][0];
|
|
expect(payload.success).toBe(true);
|
|
|
|
const { stdout: commitCount } = await execAsync('git rev-list --count HEAD', {
|
|
cwd: repoPath!,
|
|
});
|
|
expect(Number(commitCount.trim())).toBeGreaterThan(0);
|
|
|
|
const { stdout: latestMessage } = await execAsync('git log -1 --pretty=%B', { cwd: repoPath! });
|
|
expect(latestMessage.trim()).toBe(AUTOMAKER_INITIAL_COMMIT_MESSAGE);
|
|
});
|
|
});
|