use std::path::PathBuf;
#[must_use]
pub fn get_workspace_root_path() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.parent() .and_then(|p| p.parent()) .expect("Failed to get workspace root")
.to_path_buf()
}
#[must_use]
pub fn get_project_root_path() -> PathBuf {
get_workspace_root_path()
}
#[must_use]
pub fn get_test_data_path() -> PathBuf {
if let Ok(test_data_root_path) = std::env::var("TEST_DATA_ROOT_PATH") {
get_project_root_path()
.join(test_data_root_path)
.join("test_data")
} else {
get_project_root_path().join("test_data")
}
}
#[cfg(test)]
mod tests {
use rstest::rstest;
use super::*;
#[rstest]
fn test_workspace_root_contains_python_pyproject() {
let root = get_workspace_root_path();
assert!(
root.join("python/pyproject.toml").is_file(),
"Workspace root should contain python/pyproject.toml, was: {root:?}"
);
}
#[rstest]
fn test_workspace_root_contains_crates_dir() {
let root = get_workspace_root_path();
assert!(
root.join("crates").is_dir(),
"Workspace root should contain crates/ directory, was: {root:?}"
);
}
#[rstest]
fn test_project_root_equals_workspace_root() {
assert_eq!(get_project_root_path(), get_workspace_root_path());
}
#[rstest]
fn test_test_data_path_contains_checksum_manifest() {
let test_data = get_test_data_path();
assert!(
test_data.join("large/checksums.json").is_file(),
"Test data should contain the large-file checksum manifest, path: {test_data:?}"
);
}
}