mod common;
use common::{OutputAssertions, TestRepo};
#[test]
fn test_validate_healthy_stack() {
let repo = TestRepo::new();
repo.run_stax(&["status"]).assert_success();
repo.create_stack(&["feature-a", "feature-b"]);
let output = repo.run_stax(&["validate"]);
output.assert_success();
let stdout = TestRepo::stdout(&output);
assert!(
stdout.contains("All checks passed"),
"Expected all checks to pass, got: {}",
stdout
);
}
#[test]
fn test_validate_empty_repo() {
let repo = TestRepo::new();
repo.run_stax(&["status"]).assert_success();
let output = repo.run_stax(&["validate"]);
output.assert_success();
let stdout = TestRepo::stdout(&output);
assert!(
stdout.contains("All checks passed"),
"Expected all checks to pass, got: {}",
stdout
);
}
#[test]
fn test_validate_detects_needs_restack() {
let repo = TestRepo::new();
repo.run_stax(&["status"]).assert_success();
repo.create_stack(&["feature-a"]);
repo.run_stax(&["t"]);
repo.create_file("trunk-change.txt", "new content");
repo.commit("Trunk change");
let output = repo.run_stax(&["validate"]);
let stdout = TestRepo::stdout(&output);
assert!(
stdout.contains("need restack") || stdout.contains("WARN"),
"Expected needs-restack warning, got: {}",
stdout
);
}
#[test]
fn test_validate_detects_orphaned_metadata() {
let repo = TestRepo::new();
repo.run_stax(&["status"]).assert_success();
repo.create_stack(&["orphan-branch"]);
let branch_name = repo.current_branch();
repo.run_stax(&["t"]);
repo.git(&["branch", "-D", &branch_name]);
let output = repo.run_stax(&["validate"]);
let stdout = TestRepo::stdout(&output);
assert!(
stdout.contains("PASS") || stdout.contains("FAIL") || stdout.contains("orphaned"),
"Expected some validation output, got: {}",
stdout
);
}