use crate::content::parsing::MarkdownFile;
use crate::partials::BreadcrumbGenerator;
use crate::presentation::template_processor::TemplateProcessor;
use crate::templates::{ListData, TemplateManager};
use anyhow::Result;
pub struct PageGenerator {
template_processor: TemplateProcessor,
}
impl PageGenerator {
pub fn new(template_manager: TemplateManager) -> Self {
Self {
template_processor: TemplateProcessor::new(template_manager, None),
}
}
pub fn new_with_breadcrumb(
template_manager: TemplateManager,
breadcrumb_generator: Option<BreadcrumbGenerator>,
) -> Self {
Self {
template_processor: TemplateProcessor::new(template_manager, breadcrumb_generator),
}
}
pub fn process_markdown_file(
&self,
file: &MarkdownFile,
html_content: &str,
list_data: Option<ListData>,
) -> Result<String> {
self.template_processor
.process_markdown_file(file, html_content, list_data)
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::path::PathBuf;
use tempfile::tempdir;
fn create_test_markdown_file() -> MarkdownFile {
MarkdownFile {
path: PathBuf::from("test.md"),
title: "Test Page".to_string(),
content: "# Test Content\n\nThis is a test page.".to_string(),
frontmatter: crate::content::parsing::Frontmatter {
title: Some("Test Page".to_string()),
date: None,
list: None,
page_template: Some("sherwood.stpl".to_string()),
sort_by: None,
sort_order: None,
tags: None,
excerpt: None,
},
}
}
#[test]
fn test_unified_page_processing() {
let temp_dir = tempdir().unwrap();
let template_manager = TemplateManager::new(temp_dir.path()).unwrap();
let page_generator = PageGenerator::new(template_manager);
let file = create_test_markdown_file();
let html_content = "<h1>Test Content</h1>\n<p>This is a test page.</p>";
let result = page_generator.process_markdown_file(&file, html_content, None);
assert!(result.is_ok() || result.is_err());
}
#[test]
fn test_page_generator_with_breadcrumb() {
let temp_dir = tempdir().unwrap();
let template_manager = TemplateManager::new(temp_dir.path()).unwrap();
let breadcrumb_gen = BreadcrumbGenerator::new(&PathBuf::from("/content"), None);
let page_generator =
PageGenerator::new_with_breadcrumb(template_manager, Some(breadcrumb_gen));
let file = create_test_markdown_file();
let html_content = "<h1>Test Content</h1>\n<p>This is a test page.</p>";
let result = page_generator.process_markdown_file(&file, html_content, None);
assert!(result.is_ok() || result.is_err());
}
}