mod common;
use common::TestHelper;
use std::process::Command;
#[test]
fn test_prune_merged_worktrees() {
let helper = TestHelper::new().unwrap();
Command::new("git")
.args(["config", "user.email", "test@example.com"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["config", "user.name", "Test User"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
std::fs::write(helper.repo_path.join("README.md"), "Initial").unwrap();
Command::new("git")
.args(["add", "."])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["commit", "-m", "Initial commit"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
helper.run_gwtr(&["add", "feature-merged"]);
let output = helper.run_gwtr(&["prune"]);
assert!(output.status.success());
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("merged") || stdout.contains("No worktrees to prune"));
}
#[test]
fn test_prune_with_dry_run() {
let helper = TestHelper::new().unwrap();
Command::new("git")
.args(["config", "user.email", "test@example.com"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["config", "user.name", "Test User"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
std::fs::write(helper.repo_path.join("file.txt"), "content").unwrap();
Command::new("git")
.args(["add", "."])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["commit", "-m", "Init"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
helper.run_gwtr(&["add", "feature-a"]);
helper.run_gwtr(&["add", "feature-b"]);
let output = helper.run_gwtr(&["prune", "--dry-run"]);
assert!(output.status.success());
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("Would prune") || stdout.contains("No worktrees to prune"));
}
#[test]
fn test_prune_force() {
let helper = TestHelper::new().unwrap();
Command::new("git")
.args(["config", "user.email", "test@example.com"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["config", "user.name", "Test User"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
std::fs::write(helper.repo_path.join("init.txt"), "init").unwrap();
Command::new("git")
.args(["add", "."])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["commit", "-m", "Initial"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
helper.run_gwtr(&["add", "feature-old"]);
let output = helper.run_gwtr(&["prune", "--force"]);
assert!(output.status.success());
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("Pruned") || stdout.contains("No worktrees to prune"));
}
#[test]
fn test_prune_shows_what_would_be_removed() {
let helper = TestHelper::new().unwrap();
Command::new("git")
.args(["config", "user.email", "test@example.com"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["config", "user.name", "Test User"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
std::fs::write(helper.repo_path.join("test.txt"), "test").unwrap();
Command::new("git")
.args(["add", "."])
.current_dir(&helper.repo_path)
.output()
.unwrap();
Command::new("git")
.args(["commit", "-m", "Test"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
helper.run_gwtr(&["add", "feature-1"]);
helper.run_gwtr(&["add", "feature-2"]);
helper.run_gwtr(&["add", "bugfix-1"]);
let output = helper.run_gwtr(&["prune"]);
assert!(output.status.success());
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("worktree") || stdout.contains("No worktrees to prune"));
}