#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
use std::collections::BTreeMap;
use tempfile::TempDir;
#[test]
fn test_artifact_writer_creation() {
let temp_dir = TempDir::new().expect("internal error");
let writer = ArtifactWriter::new(temp_dir.path().to_path_buf()).expect("internal error");
assert_eq!(writer.manifest.len(), 0);
assert!(temp_dir.path().exists());
}
#[test]
fn test_directory_structure_creation() {
let temp_dir = TempDir::new().expect("internal error");
let writer = ArtifactWriter::new(temp_dir.path().to_path_buf()).expect("internal error");
writer.create_directory_structure().expect("internal error");
let expected_dirs = [
"dogfooding",
"mermaid/ast-generated/simple",
"mermaid/ast-generated/styled",
"mermaid/non-code/simple",
"mermaid/non-code/styled",
"templates",
];
for dir in &expected_dirs {
let path = temp_dir.path().join(dir);
assert!(path.exists(), "Directory {dir} should exist");
assert!(path.is_dir(), "Path {dir} should be a directory");
}
}
#[test]
fn test_atomic_write_with_hash() {
let temp_dir = TempDir::new().expect("internal error");
let writer = ArtifactWriter::new(temp_dir.path().to_path_buf()).expect("internal error");
let content = "Hello, World!";
let file_path = temp_dir.path().join("test.txt");
let hash = writer
.write_with_hash(&file_path, content, ArtifactType::DogfoodingMarkdown)
.expect("internal error");
assert!(file_path.exists());
let read_content = fs::read_to_string(&file_path).expect("internal error");
assert_eq!(read_content, content);
let expected_hash = blake3::hash(content.as_bytes());
assert_eq!(hash, expected_hash);
}
#[test]
fn test_artifact_tree_writing() {
let temp_dir = TempDir::new().expect("internal error");
let mut writer =
ArtifactWriter::new(temp_dir.path().to_path_buf()).expect("internal error");
let mut dogfooding = BTreeMap::new();
dogfooding.insert("test.md".to_string(), "# Test Markdown".to_string());
dogfooding.insert(
"metrics.json".to_string(),
r#"{"test": "data"}"#.to_string(),
);
let mut ast_generated = BTreeMap::new();
ast_generated.insert(
"simple-diagram.mmd".to_string(),
"graph TD\n A --> B".to_string(),
);
let mermaid = MermaidArtifacts {
ast_generated,
non_code: BTreeMap::new(),
};
let templates = vec![Template {
name: "test_template".to_string(),
content: "Hello {{name}}!".to_string(),
hash: blake3::hash(b"Hello {{name}}!"),
source_location: PathBuf::from("test.rs"),
}];
let tree = ArtifactTree {
dogfooding,
mermaid,
templates,
};
writer.write_artifacts(&tree).expect("internal error");
assert!(temp_dir.path().join("dogfooding/test.md").exists());
assert!(temp_dir.path().join("dogfooding/metrics.json").exists());
assert!(temp_dir
.path()
.join("mermaid/ast-generated/simple/simple-diagram.mmd")
.exists());
assert!(temp_dir.path().join("templates/test_template.hbs").exists());
assert!(temp_dir.path().join("artifacts.json").exists());
assert!(writer.manifest.len() >= 4); }
#[test]
fn test_integrity_verification() {
let temp_dir = TempDir::new().expect("internal error");
let mut writer =
ArtifactWriter::new(temp_dir.path().to_path_buf()).expect("internal error");
let content = "Test content";
let file_path = temp_dir.path().join("test.txt");
let hash = writer
.write_with_hash(&file_path, content, ArtifactType::DogfoodingMarkdown)
.expect("internal error");
writer.manifest.insert(
"test.txt".to_string(),
ArtifactMetadata {
path: file_path.clone(),
hash: format!("{hash}"),
size: content.len(),
generated_at: Utc::now(),
artifact_type: ArtifactType::DogfoodingMarkdown,
},
);
let report = writer.verify_integrity().expect("internal error");
assert_eq!(report.verified, 1);
assert_eq!(report.failed.len(), 0);
assert_eq!(report.missing.len(), 0);
fs::write(&file_path, "Corrupted content").expect("internal error");
let report = writer.verify_integrity().expect("internal error");
assert_eq!(report.verified, 0);
assert_eq!(report.failed.len(), 1);
assert_eq!(report.missing.len(), 0);
}
#[test]
fn test_statistics() {
let temp_dir = TempDir::new().expect("internal error");
let mut writer =
ArtifactWriter::new(temp_dir.path().to_path_buf()).expect("internal error");
writer.manifest.insert(
"test1.md".to_string(),
ArtifactMetadata {
path: temp_dir.path().join("test1.md"),
hash: "hash1".to_string(),
size: 100,
generated_at: Utc::now(),
artifact_type: ArtifactType::DogfoodingMarkdown,
},
);
writer.manifest.insert(
"test2.json".to_string(),
ArtifactMetadata {
path: temp_dir.path().join("test2.json"),
hash: "hash2".to_string(),
size: 200,
generated_at: Utc::now(),
artifact_type: ArtifactType::DogfoodingJson,
},
);
let stats = writer.get_statistics();
assert_eq!(stats.total_artifacts, 2);
assert_eq!(stats.total_size, 300);
assert!(stats.by_type.contains_key("DogfoodingMarkdown"));
assert!(stats.by_type.contains_key("DogfoodingJson"));
assert!(stats.oldest.is_some());
assert!(stats.newest.is_some());
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod property_tests {
use proptest::prelude::*;
proptest! {
#[test]
fn basic_property_stability(_input in ".*") {
prop_assert!(true);
}
#[test]
fn module_consistency_check(_x in 0u32..1000) {
prop_assert!(_x < 1001);
}
}
}