feat: module application avec render_service et file_service
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
use crate::infrastructure::file_repository;
|
||||
use std::path::Path;
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn list_markdown_files(dir: &str) -> Result<Vec<String>, String> {
|
||||
let path = Path::new(dir);
|
||||
if !path.is_dir() {
|
||||
return Err(format!("{dir} n'est pas un dossier"));
|
||||
}
|
||||
let mut files = Vec::new();
|
||||
file_repository::collect_md_files(path, &mut files).map_err(|e| e.to_string())?;
|
||||
files.sort();
|
||||
Ok(files)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use std::fs;
|
||||
|
||||
fn tmpdir(name: &str) -> std::path::PathBuf {
|
||||
std::env::temp_dir().join(name)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn list_markdown_files_sorted() {
|
||||
let dir = tmpdir("pena_fs_sorted");
|
||||
fs::create_dir_all(&dir).unwrap();
|
||||
fs::write(dir.join("z.md"), "").unwrap();
|
||||
fs::write(dir.join("a.md"), "").unwrap();
|
||||
fs::write(dir.join("m.md"), "").unwrap();
|
||||
let result = list_markdown_files(dir.to_str().unwrap()).unwrap();
|
||||
fs::remove_dir_all(&dir).unwrap();
|
||||
assert_eq!(result.len(), 3);
|
||||
assert!(result[0] < result[1] && result[1] < result[2]);
|
||||
assert!(result[0].ends_with("a.md"));
|
||||
assert!(result[2].ends_with("z.md"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn list_markdown_files_ignores_non_md() {
|
||||
let dir = tmpdir("pena_fs_non_md");
|
||||
fs::create_dir_all(&dir).unwrap();
|
||||
fs::write(dir.join("doc.md"), "").unwrap();
|
||||
fs::write(dir.join("notes.txt"), "").unwrap();
|
||||
let result = list_markdown_files(dir.to_str().unwrap()).unwrap();
|
||||
fs::remove_dir_all(&dir).unwrap();
|
||||
assert_eq!(result.len(), 1);
|
||||
assert!(result[0].ends_with("doc.md"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn list_markdown_files_not_a_dir() {
|
||||
let result = list_markdown_files("/nonexistent/pena_fs_dir");
|
||||
assert!(result.is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn list_markdown_files_empty_dir() {
|
||||
let dir = tmpdir("pena_fs_empty");
|
||||
fs::create_dir_all(&dir).unwrap();
|
||||
let result = list_markdown_files(dir.to_str().unwrap()).unwrap();
|
||||
fs::remove_dir_all(&dir).unwrap();
|
||||
assert_eq!(result.len(), 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user