takt/src/__tests__/it-worktree-delete.test.ts
nrslib da2d07bdd3 coding ピースを plan ベースに刷新し、エージェントプロンプトにボーイスカウトルール・後方互換コード検出を追加
- architect-plan → plan ムーブメントに変更、architect-planner エージェント導入
- 「既存パターン踏襲」から「最適パターン検討」へ方針転換
- worktree-sessions 関連コードを削除(未使用機能の整理)
2026-02-06 14:14:09 +09:00

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();
});
});