use std::path::PathBuf;
fn fixtures_dir() -> PathBuf {
let manifest_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"));
manifest_dir
.parent()
.unwrap()
.parent()
.unwrap()
.parent()
.unwrap()
.join("tests/fixtures")
}
#[test]
fn validate_basic_fixture_is_clean() {
let fixture = fixtures_dir().join("basic-battery-pack");
let result = super::validate_battery_pack_cmd(Some(fixture.to_str().unwrap()));
assert!(result.is_ok(), "basic-battery-pack should validate cleanly");
}
#[test]
fn validate_fancy_fixture_is_clean() {
let fixture = fixtures_dir().join("fancy-battery-pack");
let result = super::validate_battery_pack_cmd(Some(fixture.to_str().unwrap()));
assert!(result.is_ok(), "fancy-battery-pack should validate cleanly");
}
#[test]
fn validate_broken_fixture_fails() {
let fixture = fixtures_dir().join("broken-battery-pack");
let result = super::validate_battery_pack_cmd(Some(fixture.to_str().unwrap()));
assert!(
result.is_err(),
"broken-battery-pack should fail validation"
);
let err = result.unwrap_err().to_string();
assert!(
err.contains("error(s)"),
"error message should report error count: {err}"
);
}
#[test]
fn validate_workspace_manifest_fails() {
let fixture = fixtures_dir();
let result = super::validate_battery_pack_cmd(Some(fixture.to_str().unwrap()));
assert!(result.is_err(), "workspace manifest should fail");
let err = result.unwrap_err().to_string();
assert!(
err.contains("workspace manifest"),
"should mention workspace manifest: {err}"
);
}
#[test]
fn validate_nonexistent_path_fails() {
let result = super::validate_battery_pack_cmd(Some("/nonexistent/path"));
assert!(result.is_err(), "nonexistent path should fail");
}
#[test]
fn validate_uses_path_argument() {
let fixture = fixtures_dir().join("basic-battery-pack");
let result = super::validate_battery_pack_cmd(Some(fixture.to_str().unwrap()));
assert!(
result.is_ok(),
"explicit --path to a valid fixture should succeed"
);
}
#[test]
#[ignore = "causes race conditions, refactor to not rely on setting env::current_dir()"]
fn validate_defaults_to_current_directory() {
let fixture = fixtures_dir().join("fancy-battery-pack");
let original_dir = std::env::current_dir().unwrap();
std::env::set_current_dir(&fixture).unwrap();
let result = super::validate_battery_pack_cmd(None);
std::env::set_current_dir(&original_dir).unwrap();
assert!(
result.is_ok(),
"validate with None (cwd = fancy-battery-pack) should succeed: {:?}",
result.unwrap_err()
);
}
#[test]
fn validate_fixture_without_repository_warns_but_passes() {
let fixture = fixtures_dir().join("basic-battery-pack");
let result = super::validate_battery_pack_cmd(Some(fixture.to_str().unwrap()));
assert!(
result.is_ok(),
"basic-battery-pack should pass validation (warnings only): {:?}",
result.unwrap_err()
);
}
#[test]
fn validate_fixture_with_repository_no_warning() {
let fixture = fixtures_dir().join("fancy-battery-pack");
let result = super::validate_battery_pack_cmd(Some(fixture.to_str().unwrap()));
assert!(
result.is_ok(),
"fancy-battery-pack should validate cleanly: {:?}",
result.unwrap_err()
);
}