use std::path::PathBuf;
use std::process::Command;
#[test]
fn test_progress_display_shows_all_phases() {
let test_codebase =
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/data/fixtures/sample_codebase");
let output = Command::new("cargo")
.args([
"run",
"--bin",
"debtmap",
"--quiet",
"--",
"analyze",
test_codebase.to_str().unwrap(),
])
.output()
.expect("Failed to execute debtmap command");
let stderr = String::from_utf8_lossy(&output.stderr);
if !output.status.success() {
eprintln!("stdout: {}", String::from_utf8_lossy(&output.stdout));
eprintln!("stderr: {}", stderr);
panic!("debtmap analyze command failed");
}
assert!(
stderr.contains("1/2 files parse"),
"Phase 1 'files parse' should appear in output"
);
assert!(
stderr.contains("2/2 Building call graph"),
"Phase 2 'Building call graph' should appear in output"
);
assert!(
stderr.contains("Analysis complete in"),
"Completion message should appear in output"
);
}
#[test]
fn test_progress_display_shows_completion_indicators() {
let test_codebase =
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/data/fixtures/sample_codebase");
let output = Command::new("cargo")
.args([
"run",
"--bin",
"debtmap",
"--quiet",
"--",
"analyze",
test_codebase.to_str().unwrap(),
])
.output()
.expect("Failed to execute debtmap command");
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(output.status.success(), "Command should succeed");
assert!(
stderr.contains("✓ 1/2") || stderr.contains("✓ 2/2"),
"Completion indicators (✓) should appear for completed phases"
);
}
#[test]
fn test_progress_display_completes_all_phases() {
let test_codebase =
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/data/fixtures/sample_codebase");
let output = Command::new("cargo")
.args([
"run",
"--bin",
"debtmap",
"--quiet",
"--",
"analyze",
test_codebase.to_str().unwrap(),
])
.output()
.expect("Failed to execute debtmap command");
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(output.status.success(), "Command should succeed");
let completed_phases = stderr.matches("✓").count();
assert!(
completed_phases >= 2,
"Should have at least 2 completed phases, found: {}",
completed_phases
);
}
#[test]
fn test_progress_display_shows_timing() {
let test_codebase =
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/data/fixtures/sample_codebase");
let output = Command::new("cargo")
.args([
"run",
"--bin",
"debtmap",
"--quiet",
"--",
"analyze",
test_codebase.to_str().unwrap(),
])
.output()
.expect("Failed to execute debtmap command");
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(output.status.success(), "Command should succeed");
assert!(
stderr.contains("s") && stderr.contains("Analysis complete in"),
"Timing information should appear in seconds"
);
assert!(
stderr.contains(" - ") && stderr.contains("s"),
"Individual phase durations should be shown"
);
}
#[test]
fn test_progress_display_with_empty_codebase() {
use tempfile::TempDir;
let temp_dir = TempDir::new().unwrap();
let output = Command::new("cargo")
.args([
"run",
"--bin",
"debtmap",
"--quiet",
"--",
"analyze",
temp_dir.path().to_str().unwrap(),
])
.output()
.expect("Failed to execute debtmap command");
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("1/2 files parse"),
"Phase 1 should appear even for empty codebase"
);
let completed_phases = stderr.matches("✓").count();
assert!(
completed_phases >= 2,
"All 2 phases should complete even for empty codebase, found: {}",
completed_phases
);
}