Files
Pena/src-tauri/src/application/file_service.rs
T

66 lines
2.0 KiB
Rust

use crate::infrastructure::file_repository;
use std::path::Path;
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);
}
}