mod common;
use common::TestHelper;
use std::fs;
#[test]
fn test_remove_removes_worktree() {
let helper = TestHelper::new().expect("Failed to create test helper");
fs::write(helper.repo_path.join("README.md"), "# Test Repo").unwrap();
std::process::Command::new("git")
.args(["add", "."])
.current_dir(&helper.repo_path)
.output()
.unwrap();
std::process::Command::new("git")
.args(["commit", "-m", "Initial commit"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
let output = helper.run_gwtr(&["add", "feature-remove"]);
assert!(output.status.success(), "Failed to create worktree");
let repo_name = helper.repo_path.file_name().unwrap().to_str().unwrap();
let worktree_path = helper
.repo_path
.parent()
.unwrap()
.join(format!("{}_feature-remove", repo_name));
assert!(
worktree_path.exists(),
"Worktree should exist before removal"
);
let output = helper.run_gwtr(&["remove", "feature-remove"]);
assert!(
output.status.success(),
"remove command should succeed: stderr: {}",
String::from_utf8_lossy(&output.stderr)
);
assert!(
!worktree_path.exists(),
"Worktree directory should be removed"
);
}
#[test]
fn test_remove_fails_if_worktree_not_exists() {
let helper = TestHelper::new().expect("Failed to create test helper");
fs::write(helper.repo_path.join("README.md"), "# Test Repo").unwrap();
std::process::Command::new("git")
.args(["add", "."])
.current_dir(&helper.repo_path)
.output()
.unwrap();
std::process::Command::new("git")
.args(["commit", "-m", "Initial commit"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
let output = helper.run_gwtr(&["remove", "non-existent"]);
assert!(
!output.status.success(),
"remove command should fail for non-existent worktree"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("not found") || stderr.contains("does not exist"),
"Error message should indicate worktree not found: {}",
stderr
);
}
#[test]
fn test_remove_shows_confirmation_message() {
let helper = TestHelper::new().expect("Failed to create test helper");
fs::write(helper.repo_path.join("README.md"), "# Test Repo").unwrap();
std::process::Command::new("git")
.args(["add", "."])
.current_dir(&helper.repo_path)
.output()
.unwrap();
std::process::Command::new("git")
.args(["commit", "-m", "Initial commit"])
.current_dir(&helper.repo_path)
.output()
.unwrap();
helper.run_gwtr(&["add", "feature-confirm"]);
let output = helper.run_gwtr(&["remove", "feature-confirm"]);
assert!(output.status.success(), "remove command should succeed");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("Removed worktree") || stdout.contains("feature-confirm"),
"Should show confirmation message"
);
}