feat: module application avec render_service et file_service

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 14:09:08 +02:00
parent 7d2f56a364
commit 9eae97f1d8
4 changed files with 129 additions and 0 deletions
@@ -0,0 +1,60 @@
use crate::domain::MarkdownRenderer;
use crate::infrastructure::file_repository;
#[allow(dead_code)]
pub fn render_string(renderer: &dyn MarkdownRenderer, content: &str) -> String {
renderer.render(content)
}
#[allow(dead_code)]
pub fn render_file(renderer: &dyn MarkdownRenderer, path: &str) -> Result<String, String> {
let content = file_repository::read_file(path)?;
Ok(renderer.render(&content))
}
#[cfg(test)]
mod tests {
use super::*;
use std::fs;
struct MockRenderer;
impl MarkdownRenderer for MockRenderer {
fn render(&self, content: &str) -> String {
format!("<mock>{content}</mock>")
}
}
#[test]
fn render_string_delegates_to_renderer() {
let renderer = MockRenderer;
let result = render_string(&renderer, "hello");
assert_eq!(result, "<mock>hello</mock>");
}
#[test]
fn render_string_empty_content() {
let renderer = MockRenderer;
let result = render_string(&renderer, "");
assert_eq!(result, "<mock></mock>");
}
#[test]
fn render_file_success() {
let dir = std::env::temp_dir().join("pena_rs_render_file");
fs::create_dir_all(&dir).unwrap();
let file = dir.join("test.md");
fs::write(&file, "world").unwrap();
let renderer = MockRenderer;
let result = render_file(&renderer, file.to_str().unwrap());
fs::remove_dir_all(&dir).unwrap();
assert_eq!(result.unwrap(), "<mock>world</mock>");
}
#[test]
fn render_file_not_found() {
let renderer = MockRenderer;
let result = render_file(&renderer, "/nonexistent/pena_rs_file.md");
assert!(result.is_err());
}
}