#[cfg(test)]
mod integration_tests {
use metadata_gen::error::MetadataError;
use metadata_gen::metadata::extract_metadata;
use metadata_gen::metatags::generate_metatags;
use metadata_gen::utils::escape_html;
#[test]
fn test_metadata_and_metatags_integration() {
let content = r#"
---
title: "Integration Test Page"
description: "This is a page for integration testing."
keywords: "integration, test, metadata"
---
# Content for integration testing.
"#;
let metadata = extract_metadata(content)
.expect("Failed to extract metadata");
assert_eq!(
metadata.get("title"),
Some(&"Integration Test Page".to_string())
);
assert_eq!(
metadata.get("description"),
Some(
&"This is a page for integration testing.".to_string()
)
);
assert_eq!(
metadata.get("keywords"),
Some(&"integration, test, metadata".to_string())
);
let metatags = generate_metatags(&metadata.into_inner());
assert!(metatags.primary.contains("description"));
assert!(metatags.primary.contains("keywords"));
}
#[test]
fn test_html_escaping_and_metadata() {
let html_content = r#"
---
title: "Escaping Test"
description: "<script>alert('test');</script>"
keywords: "escape, html, test"
---
# Content for escaping test.
"#;
let metadata = extract_metadata(html_content)
.expect("Failed to extract metadata");
let escaped_description =
escape_html(metadata.get("description").unwrap());
assert_eq!(
escaped_description,
"<script>alert('test');</script>"
);
}
#[test]
fn test_metadata_extraction_error_handling() {
let invalid_content = r#"
---
title Integration Test Page
description: This is an invalid front matter format.
---
# Content for invalid test.
"#;
let result = extract_metadata(invalid_content);
assert!(result.is_err());
if let Err(MetadataError::ExtractionError { message }) = result
{
assert!(message.contains("No valid front matter found"));
} else {
panic!("Expected ExtractionError, got {:?}", result);
}
}
#[tokio::test]
async fn test_async_metadata_and_metatags_integration() {
use tempfile::tempdir;
use tokio::fs::File;
use tokio::io::AsyncWriteExt;
let temp_dir = tempdir().unwrap();
let file_path = temp_dir.path().join("test_async.md");
let mut file = File::create(&file_path).await.unwrap();
let content = r#"
---
title: "Async Test Page"
description: "This is an async test for metadata extraction."
keywords: "async, test, metadata"
---
# Async Test Content
"#;
file.write_all(content.as_bytes()).await.unwrap();
let result =
metadata_gen::utils::async_extract_metadata_from_file(
file_path.to_str().unwrap(),
)
.await;
assert!(result.is_ok());
let (metadata, keywords, meta_tags) = result.unwrap();
assert_eq!(
metadata.get("title"),
Some(&"Async Test Page".to_string())
);
assert_eq!(
metadata.get("description"),
Some(
&"This is an async test for metadata extraction."
.to_string()
)
);
assert_eq!(keywords, vec!["async", "test", "metadata"]);
assert!(!meta_tags.primary.is_empty());
}
}