#[cfg(test)]
mod tests {
use metadata_gen::{
self, extract_and_prepare_metadata, MetadataError,
};
#[test]
fn test_extract_and_prepare_metadata_valid() {
let content = r#"---
title: "My Page"
description: "A sample page"
keywords: "rust, static site generator, metadata"
---
# Content goes here
"#;
let result = extract_and_prepare_metadata(content);
assert!(
result.is_ok(),
"Metadata extraction should succeed for valid content"
);
let (metadata_map, keywords, meta_tags) = result.unwrap();
assert_eq!(
metadata_map.get("title"),
Some(&"My Page".to_string()),
"Title metadata should be extracted correctly"
);
assert_eq!(
metadata_map.get("description"),
Some(&"A sample page".to_string()),
"Description metadata should be extracted correctly"
);
assert_eq!(
keywords,
vec!["rust", "static site generator", "metadata"],
"Keywords should be extracted correctly"
);
assert!(
meta_tags.primary.contains("description"),
"Primary meta tags should contain 'description'"
);
}
#[test]
fn test_extract_and_prepare_metadata_missing_metadata() {
let content = r#"---
title: "No Description"
---
# Content goes here
"#;
let result = extract_and_prepare_metadata(content);
assert!(result.is_ok(), "Metadata extraction should succeed even with missing fields");
let (metadata_map, keywords, meta_tags) = result.unwrap();
assert_eq!(
metadata_map.get("title"),
Some(&"No Description".to_string()),
"Title metadata should be extracted correctly"
);
assert_eq!(
keywords.len(),
0,
"No keywords should be extracted if none are provided"
);
assert!(
!meta_tags.primary.contains("description"),
"Primary meta tags should not contain 'description'"
);
}
#[test]
fn test_extract_and_prepare_metadata_invalid_format() {
let content = r#"---
title My Page
description A sample page
---
# Content goes here
"#;
let result = extract_and_prepare_metadata(content);
assert!(
result.is_err(),
"Invalid front matter format should result in an error"
);
if let Err(MetadataError::ExtractionError { message }) = result
{
assert!(message.contains("No valid front matter found"));
} else {
panic!("Expected ExtractionError, got {:?}", result);
}
}
}