- architect-plan → plan ムーブメントに変更、architect-planner エージェント導入 - 「既存パターン踏襲」から「最適パターン検討」へ方針転換 - worktree-sessions 関連コードを削除(未使用機能の整理)
83 lines
2.7 KiB
TypeScript
83 lines
2.7 KiB
TypeScript
/**
|
|
* Integration test for branch deletion
|
|
*
|
|
* Tests that takt branches can be properly deleted.
|
|
*/
|
|
|
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { mkdirSync, writeFileSync, rmSync, existsSync } from 'node:fs';
|
|
import { join } from 'node:path';
|
|
import { execFileSync } from 'node:child_process';
|
|
import { tmpdir } from 'node:os';
|
|
import { listTaktBranches } from '../infra/task/branchList.js';
|
|
import { deleteBranch } from '../features/tasks/list/taskActions.js';
|
|
|
|
describe('branch deletion', () => {
|
|
let testDir: string;
|
|
|
|
beforeEach(() => {
|
|
// Create temporary git repository
|
|
testDir = join(tmpdir(), `takt-test-${Date.now()}`);
|
|
mkdirSync(testDir, { recursive: true });
|
|
|
|
// Initialize git repo
|
|
execFileSync('git', ['init'], { cwd: testDir });
|
|
execFileSync('git', ['config', 'user.name', 'Test User'], { cwd: testDir });
|
|
execFileSync('git', ['config', 'user.email', 'test@example.com'], { cwd: testDir });
|
|
|
|
// Create initial commit
|
|
writeFileSync(join(testDir, 'README.md'), '# Test');
|
|
execFileSync('git', ['add', '.'], { cwd: testDir });
|
|
execFileSync('git', ['commit', '-m', 'Initial commit'], { cwd: testDir });
|
|
});
|
|
|
|
afterEach(() => {
|
|
// Cleanup
|
|
if (existsSync(testDir)) {
|
|
rmSync(testDir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
it('should delete regular branches normally', () => {
|
|
const defaultBranch = execFileSync('git', ['branch', '--show-current'], {
|
|
cwd: testDir,
|
|
encoding: 'utf-8',
|
|
stdio: 'pipe',
|
|
}).trim();
|
|
|
|
// Create a regular local branch
|
|
const branchName = 'takt/20260203T1002-regular-branch';
|
|
execFileSync('git', ['checkout', '-b', branchName], { cwd: testDir });
|
|
|
|
// Make a change
|
|
writeFileSync(join(testDir, 'test.txt'), 'test content');
|
|
execFileSync('git', ['add', 'test.txt'], { cwd: testDir });
|
|
execFileSync('git', ['commit', '-m', 'Test change'], { cwd: testDir });
|
|
|
|
// Switch back to main
|
|
execFileSync('git', ['checkout', defaultBranch || 'main'], { cwd: testDir });
|
|
|
|
// Verify branch exists
|
|
const branchesBefore = listTaktBranches(testDir);
|
|
const foundBefore = branchesBefore.find(b => b.branch === branchName);
|
|
expect(foundBefore).toBeDefined();
|
|
expect(foundBefore?.worktreePath).toBeUndefined();
|
|
|
|
// Delete branch
|
|
const result = deleteBranch(testDir, {
|
|
info: foundBefore!,
|
|
filesChanged: 1,
|
|
taskSlug: '20260203T1002-regular-branch',
|
|
originalInstruction: 'Test instruction',
|
|
});
|
|
|
|
// Verify deletion succeeded
|
|
expect(result).toBe(true);
|
|
|
|
// Verify branch is no longer listed
|
|
const branchesAfter = listTaktBranches(testDir);
|
|
const foundAfter = branchesAfter.find(b => b.branch === branchName);
|
|
expect(foundAfter).toBeUndefined();
|
|
});
|
|
});
|