use std::path::Path;
#[test]
fn human_bytes_zero() {
assert_eq!(super::store_ops::human_bytes(0), "0 B");
}
#[test]
fn human_bytes_small() {
assert_eq!(super::store_ops::human_bytes(512), "512 B");
}
#[test]
fn human_bytes_1023() {
assert_eq!(super::store_ops::human_bytes(1023), "1023 B");
}
#[test]
fn human_bytes_1kb() {
assert_eq!(super::store_ops::human_bytes(1024), "1.0 KB");
}
#[test]
fn human_bytes_100kb() {
assert_eq!(super::store_ops::human_bytes(102_400), "100.0 KB");
}
#[test]
fn human_bytes_1mb() {
assert_eq!(super::store_ops::human_bytes(1_048_576), "1.0 MB");
}
#[test]
fn human_bytes_50mb() {
assert_eq!(super::store_ops::human_bytes(52_428_800), "50.0 MB");
}
#[test]
fn list_store_entries_empty_dir() {
let dir = tempfile::tempdir().unwrap();
let entries = super::store_ops::list_store_entries(dir.path()).unwrap();
assert!(entries.is_empty());
}
#[test]
fn list_store_entries_with_hash_dir_no_meta() {
let dir = tempfile::tempdir().unwrap();
let hash_dir = dir.path().join("abc123def456");
std::fs::create_dir_all(&hash_dir).unwrap();
let entries = super::store_ops::list_store_entries(dir.path()).unwrap();
assert_eq!(entries.len(), 1);
assert_eq!(entries[0].0, "blake3:abc123def456");
assert_eq!(entries[0].1, "unknown");
assert_eq!(entries[0].2, "unknown");
}
#[test]
fn list_store_entries_with_meta() {
let dir = tempfile::tempdir().unwrap();
let hash_dir = dir.path().join("abc123");
std::fs::create_dir_all(&hash_dir).unwrap();
let meta_yaml = r#"
schema: "1.0"
store_hash: "blake3:abc123"
recipe_hash: "blake3:recipe1"
input_hashes: []
arch: x86_64
provider: apt
created_at: "2026-03-08T12:00:00Z"
generator: "forjar 1.0.0"
references: []
"#;
std::fs::write(hash_dir.join("meta.yaml"), meta_yaml).unwrap();
let entries = super::store_ops::list_store_entries(dir.path()).unwrap();
assert_eq!(entries.len(), 1);
assert_eq!(entries[0].1, "apt");
assert_eq!(entries[0].2, "x86_64");
}
#[test]
fn list_store_entries_skips_gc_roots() {
let dir = tempfile::tempdir().unwrap();
std::fs::create_dir_all(dir.path().join(".gc-roots")).unwrap();
std::fs::create_dir_all(dir.path().join("abc123")).unwrap();
let entries = super::store_ops::list_store_entries(dir.path()).unwrap();
assert_eq!(entries.len(), 1);
assert!(entries[0].0.contains("abc123"));
}
#[test]
fn list_store_entries_skips_files() {
let dir = tempfile::tempdir().unwrap();
std::fs::write(dir.path().join("some-file.txt"), "data").unwrap();
let entries = super::store_ops::list_store_entries(dir.path()).unwrap();
assert!(entries.is_empty());
}
#[test]
fn list_store_entries_nonexistent() {
let result =
super::store_ops::list_store_entries(Path::new("/tmp/forjar-nonexistent-store-xyz"));
assert!(result.is_err());
}
#[test]
fn collect_profile_hashes_no_profiles_dir() {
let dir = tempfile::tempdir().unwrap();
let store_dir = dir.path().join("store");
std::fs::create_dir_all(&store_dir).unwrap();
let hashes = super::store_ops::collect_profile_hashes(&store_dir);
assert!(hashes.is_empty());
}
#[test]
fn collect_lock_hashes_no_lockfile() {
let dir = tempfile::tempdir().unwrap();
let hashes = super::store_ops::collect_lock_hashes(dir.path());
assert!(hashes.is_empty());
}
#[test]
fn local_machine_fields() {
let m = super::store_ops::local_machine();
assert_eq!(m.hostname, "localhost");
assert_eq!(m.addr, "127.0.0.1");
assert_eq!(m.user, "root");
assert!(!m.arch.is_empty());
}