]> git.r.bdr.sh - rbdr/page/blobdiff - src/file_handler/file_strategies/file.rs
Fix test
[rbdr/page] / src / file_handler / file_strategies / file.rs
index 7e95adf4b88d977d4109ddc3fb0591e4d304bc20..363f71268d9b0afe30bc2457a5faf4c1dfdae586 100644 (file)
@@ -1,13 +1,13 @@
 pub struct Strategy {}
 
-use std::path::PathBuf;
 use std::fs::{copy, create_dir_all};
+use std::path::Path;
 
-use crate::file_handler::{File, FileType, FileHandlerStrategy};
+use crate::file_handler::{File, FileType, Strategy as FileHandlerStrategy};
 
 impl Strategy {
-    fn handle(&self, source: &PathBuf, destination: &PathBuf, file: &File) {
-        let relative_path = file.path.strip_prefix(&source).unwrap();
+    fn handle(source: &Path, destination: &Path, file: &File) {
+        let relative_path = file.path.strip_prefix(source).unwrap();
         let complete_destination = destination.join(relative_path);
         let destination_parent = complete_destination.parent().unwrap();
         create_dir_all(destination_parent).unwrap();
@@ -16,7 +16,7 @@ impl Strategy {
 }
 
 impl FileHandlerStrategy for Strategy {
-    fn is(&self, path: &PathBuf) -> bool {
+    fn is(&self, path: &Path) -> bool {
         !path.is_dir()
     }
 
@@ -25,18 +25,15 @@ impl FileHandlerStrategy for Strategy {
     }
 
     fn can_handle(&self, file_type: &FileType) -> bool {
-        match file_type {
-            FileType::File => true,
-            _ => false,
-        }
+        matches!(file_type, FileType::File)
     }
 
-    fn handle_html(&self, source: &PathBuf, destination: &PathBuf, file: &File, _l: &str) {
-        return self.handle(source, destination, file);
+    fn handle_html(&self, source: &Path, destination: &Path, file: &File, _l: &str) {
+        Strategy::handle(source, destination, file);
     }
 
-    fn handle_gemini(&self, source: &PathBuf, destination: &PathBuf, file: &File) {
-        return self.handle(source, destination, file);
+    fn handle_gemini(&self, source: &Path, destination: &Path, file: &File) {
+        Strategy::handle(source, destination, file);
     }
 }
 
@@ -56,6 +53,12 @@ mod tests {
         let strategy = Strategy {};
         assert!(strategy.is(&test_dir.join("image.png")));
         assert!(strategy.is(&test_dir.join("style.css")));
+    }
+
+    #[test]
+    fn rejects_directories() {
+        let test_dir = setup_test_dir();
+        let strategy = Strategy {};
         assert!(!strategy.is(&test_dir));
     }
 
@@ -66,9 +69,14 @@ mod tests {
     }
 
     #[test]
-    fn handles_correct_file_type() {
+    fn handles_file_type() {
         let strategy = Strategy {};
         assert!(strategy.can_handle(&FileType::File));
+    }
+
+    #[test]
+    fn rejects_non_file_types() {
+        let strategy = Strategy {};
         assert!(!strategy.can_handle(&FileType::Layout));
         assert!(!strategy.can_handle(&FileType::Gemini));
         assert!(!strategy.can_handle(&FileType::Unknown));
@@ -79,26 +87,23 @@ mod tests {
         let test_dir = setup_test_dir();
         let source_dir = test_dir.join("source");
         let output_dir = test_dir.join("output");
-        create_dir_all(&source_dir)
-            .expect("Could not create source test directory");
-        create_dir_all(&output_dir)
-            .expect("Could not create output test directory");
+        create_dir_all(&source_dir).expect("Could not create source test directory");
+        create_dir_all(&output_dir).expect("Could not create output test directory");
         create_test_file(&source_dir.join("image.png"), "A fish playing the banjo");
-        let strategy = Strategy {};
 
         let file = File {
             path: source_dir.join("image.png"),
             file_type: FileType::File,
         };
 
-        strategy.handle(&source_dir, &output_dir, &file);
+        Strategy::handle(&source_dir, &output_dir, &file);
 
         let copied_path = &output_dir.join("image.png");
         assert!(copied_path.exists());
 
         // Verify file contents are identical
         let original = fs::read(&file.path).unwrap();
-        let copied = fs::read(&copied_path).unwrap();
+        let copied = fs::read(copied_path).unwrap();
         assert_eq!(original, copied);
     }
 
@@ -107,21 +112,20 @@ mod tests {
         let test_dir = setup_test_dir();
         let source_dir = test_dir.join("source");
         let output_dir = test_dir.join("output");
-        create_dir_all(&source_dir)
-            .expect("Could not create source test directory");
-        create_dir_all(&output_dir)
-            .expect("Could not create output test directory");
-        create_dir_all(&source_dir.join("nested"))
-            .expect("Could not create source test directory");
-        create_test_file(&source_dir.join("nested/style.css"), "* { margin: 0; padding: 0 }");
-        let strategy = Strategy {};
+        create_dir_all(&source_dir).expect("Could not create source test directory");
+        create_dir_all(&output_dir).expect("Could not create output test directory");
+        create_dir_all(source_dir.join("nested")).expect("Could not create source test directory");
+        create_test_file(
+            &source_dir.join("nested/style.css"),
+            "* { margin: 0; padding: 0 }",
+        );
 
         let file = File {
             path: source_dir.join("nested/style.css"),
             file_type: FileType::File,
         };
 
-        strategy.handle(&source_dir, &output_dir, &file);
+        Strategy::handle(&source_dir, &output_dir, &file);
 
         let copied_path = output_dir.join("nested/style.css");
         assert!(copied_path.exists());
@@ -137,10 +141,8 @@ mod tests {
         let test_dir = setup_test_dir();
         let source_dir = test_dir.join("source");
         let output_dir = test_dir.join("output");
-        create_dir_all(&source_dir)
-            .expect("Could not create source test directory");
-        create_dir_all(&output_dir)
-            .expect("Could not create output test directory");
+        create_dir_all(&source_dir).expect("Could not create source test directory");
+        create_dir_all(&output_dir).expect("Could not create output test directory");
         create_test_file(&source_dir.join("image.png"), "A fish playing the banjo");
         let strategy = Strategy {};
 
@@ -156,7 +158,7 @@ mod tests {
 
         // Verify file contents are identical
         let original = fs::read(&file.path).unwrap();
-        let copied = fs::read(&copied_path).unwrap();
+        let copied = fs::read(copied_path).unwrap();
         assert_eq!(original, copied);
     }
 
@@ -165,10 +167,8 @@ mod tests {
         let test_dir = setup_test_dir();
         let source_dir = test_dir.join("source");
         let output_dir = test_dir.join("output");
-        create_dir_all(&source_dir)
-            .expect("Could not create source test directory");
-        create_dir_all(&output_dir)
-            .expect("Could not create output test directory");
+        create_dir_all(&source_dir).expect("Could not create source test directory");
+        create_dir_all(&output_dir).expect("Could not create output test directory");
         create_test_file(&source_dir.join("image.png"), "A fish playing the banjo");
         let strategy = Strategy {};
 
@@ -184,7 +184,7 @@ mod tests {
 
         // Verify file contents are identical
         let original = fs::read(&file.path).unwrap();
-        let copied = fs::read(&copied_path).unwrap();
+        let copied = fs::read(copied_path).unwrap();
         assert_eq!(original, copied);
     }
 }