aboutsummaryrefslogtreecommitdiff
path: root/src/file_finder.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/file_finder.rs')
-rw-r--r--src/file_finder.rs86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/file_finder.rs b/src/file_finder.rs
index bcd368d..a94aa8a 100644
--- a/src/file_finder.rs
+++ b/src/file_finder.rs
@@ -28,3 +28,89 @@ fn find_files_recursively(root_path: &PathBuf, directory_path: &PathBuf) -> Vec<
}
return result;
}
+
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::file_handler::FileType;
+ use std::collections::HashSet;
+ use std::fs::create_dir_all;
+
+ fn fixtures_dir() -> PathBuf {
+ PathBuf::from("tests/fixtures")
+ }
+
+ fn get_paths(files: &Vec<File>) -> HashSet<String> {
+ files
+ .iter()
+ .map(|f| f.path.strip_prefix(&fixtures_dir()).unwrap().to_string_lossy().to_string())
+ .collect()
+ }
+
+ #[test]
+ fn finds_all_files() {
+ let files = find_files(&fixtures_dir());
+ let paths = get_paths(&files);
+
+ assert!(paths.contains("test1.gmi"));
+ assert!(paths.contains("_layout.html"));
+ assert!(paths.contains("nested/nested.gmi"));
+ assert!(paths.contains("assets/style.css"));
+ assert!(paths.contains("image.png"));
+ }
+
+ #[test]
+ fn identifies_correct_file_types() {
+ let files = find_files(&fixtures_dir());
+
+ for file in files {
+ let extension = file.path.extension().and_then(|e| e.to_str());
+ match extension {
+ Some("gmi") => assert_eq!(file.file_type, FileType::Gemini),
+ Some("html") => {
+ if file.path.ends_with("_layout.html") {
+ assert_eq!(file.file_type, FileType::Layout)
+ } else {
+ assert_eq!(file.file_type, FileType::File)
+ }
+ },
+ _ => assert_eq!(file.file_type, FileType::File),
+ }
+ }
+ }
+
+ #[test]
+ fn ignores_git_directory() {
+ let files = find_files(&fixtures_dir());
+ let paths = get_paths(&files);
+
+ // These files should exist in the fixtures but not be included
+ assert!(!paths.iter().any(|p| p.starts_with(".git/")));
+ assert!(!paths.contains(".gitignore"));
+ }
+
+ #[test]
+ fn handles_nested_directories() {
+ let files = find_files(&fixtures_dir());
+ let paths = get_paths(&files);
+
+ // Check that files in nested directories are found
+ assert!(paths.contains("nested/nested.gmi"));
+ assert!(paths.contains("assets/style.css"));
+
+ // Verify directory structure is preserved in paths
+ let nested_files: Vec<_> = files.iter()
+ .filter(|f| f.path.starts_with(fixtures_dir().join("nested")))
+ .collect();
+ assert!(!nested_files.is_empty());
+ }
+
+ #[test]
+ fn returns_empty_for_empty_directory() {
+ let empty_dir = fixtures_dir().join("empty");
+ let _ = create_dir_all(&empty_dir);
+ let files = find_files(&empty_dir);
+ assert!(files.is_empty());
+ }
+}