]> git.r.bdr.sh - rbdr/page/blobdiff - src/file_handler/file_strategies/file.rs
Update layout tests
[rbdr/page] / src / file_handler / file_strategies / file.rs
index 5faa689fc64b442740a59b4a13013a6305a5ab71..603d1894e76feed4dffdd10e4d8d2917250fb829 100644 (file)
@@ -42,140 +42,160 @@ impl FileHandlerStrategy for Strategy {
 
 #[cfg(test)]
 mod tests {
 
 #[cfg(test)]
 mod tests {
-    use super::*;
     use std::fs;
 
     use std::fs;
 
-    fn setup() -> Strategy {
-        Strategy {}
-    }
+    use super::*;
 
 
-    fn fixtures_dir() -> PathBuf {
-        PathBuf::from("tests/fixtures")
-    }
+    use test_utilities::*;
 
 
-    fn fixture_path(filename: &str) -> PathBuf {
-        fixtures_dir().join(filename)
+    #[test]
+    fn identifies_regular_files() {
+        let test_dir = setup_test_dir();
+        create_test_file(&test_dir.join("image.png"), "");
+        create_test_file(&test_dir.join("style.css"), "");
+        let strategy = Strategy {};
+        assert!(strategy.is(&test_dir.join("image.png")));
+        assert!(strategy.is(&test_dir.join("style.css")));
     }
 
     }
 
-    mod file_type_tests {
-        use super::*;
-
-        #[test]
-        fn identifies_regular_files() {
-            let strategy = setup();
-            assert!(strategy.is(&fixture_path("image.png")));
-            assert!(strategy.is(&fixture_path("style.css")));
-            assert!(!strategy.is(&fixtures_dir()));
-        }
-
-        #[test]
-        fn identifies_file_type() {
-            let strategy = setup();
-            assert!(matches!(strategy.identify(), FileType::File));
-        }
-
-        #[test]
-        fn handles_correct_file_type() {
-            let strategy = setup();
-            assert!(strategy.can_handle(&FileType::File));
-            assert!(!strategy.can_handle(&FileType::Layout));
-            assert!(!strategy.can_handle(&FileType::Gemini));
-            assert!(!strategy.can_handle(&FileType::Unknown));
-        }
+    #[test]
+    fn rejects_directories() {
+        let test_dir = setup_test_dir();
+        let strategy = Strategy {};
+        assert!(!strategy.is(&test_dir));
     }
 
     }
 
-    mod file_handling_tests {
-        use super::*;
-
-        #[test]
-        fn copies_single_file() {
-            let strategy = setup();
-            let source = fixtures_dir();
-            let output = fixture_path("output");
-
-            let file = File {
-                path: fixture_path("image.png"),
-                file_type: FileType::File,
-            };
-
-            strategy.handle(&source, &output, &file);
-
-            let copied_path = output.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();
-            assert_eq!(original, copied);
-
-            // Cleanup
-            let _ = fs::remove_file(copied_path);
-        }
-
-        #[test]
-        fn copies_nested_file() {
-            let strategy = setup();
-            let source = fixtures_dir();
-            let output = fixture_path("output");
-
-            let file = File {
-                path: fixture_path("assets/style.css"),
-                file_type: FileType::File,
-            };
-
-            strategy.handle(&source, &output, &file);
-
-            let copied_path = output.join("assets").join("style.css");
-            assert!(copied_path.exists());
-
-            // Verify file contents are identical
-            let original = fs::read(&file.path).unwrap();
-            let copied = fs::read(&copied_path).unwrap();
-            assert_eq!(original, copied);
-
-            // Cleanup
-            let _ = fs::remove_file(copied_path);
-            let _ = fs::remove_dir(output.join("assets"));
-        }
-
-        #[test]
-        fn handle_html_copies_file() {
-            let strategy = setup();
-            let source = fixtures_dir();
-            let output = fixture_path("output_html");
-
-            let file = File {
-                path: fixture_path("image.png"),
-                file_type: FileType::File,
-            };
-
-            strategy.handle_html(&source, &output, &file, "unused layout");
-
-            let copied_path = output.join("image.png");
-            assert!(copied_path.exists());
+    #[test]
+    fn identifies_file_type() {
+        let strategy = Strategy {};
+        assert!(matches!(strategy.identify(), FileType::File));
+    }
 
 
-            // Cleanup
-            let _ = fs::remove_file(copied_path);
-        }
+    #[test]
+    fn handles_file_type() {
+        let strategy = Strategy {};
+        assert!(strategy.can_handle(&FileType::File));
+    }
 
 
-        #[test]
-        fn handle_gemini_copies_file() {
-            let strategy = setup();
-            let source = fixtures_dir();
-            let output = fixture_path("output_gemini");
+    #[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));
+    }
 
 
-            let file = File {
-                path: fixture_path("image.png"),
-                file_type: FileType::File,
-            };
+    #[test]
+    fn copies_single_file() {
+        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_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);
+
+        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();
+        assert_eq!(original, copied);
+    }
 
 
-            strategy.handle_gemini(&source, &output, &file);
+    #[test]
+    fn copies_nested_file() {
+        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 {};
+
+        let file = File {
+            path: source_dir.join("nested/style.css"),
+            file_type: FileType::File,
+        };
+
+        strategy.handle(&source_dir, &output_dir, &file);
+
+        let copied_path = output_dir.join("nested/style.css");
+        assert!(copied_path.exists());
+
+        // Verify file contents are identical
+        let original = fs::read(&file.path).unwrap();
+        let copied = fs::read(&copied_path).unwrap();
+        assert_eq!(original, copied);
+    }
 
 
-            let copied_path = output.join("image.png");
-            assert!(copied_path.exists());
+    #[test]
+    fn handle_html_copies_file() {
+        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_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_html(&source_dir, &output_dir, &file, "unused layout");
+
+        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();
+        assert_eq!(original, copied);
+    }
 
 
-            // Cleanup
-            let _ = fs::remove_file(copied_path);
-        }
+    #[test]
+    fn handle_gemini_copies_file() {
+        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_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_gemini(&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();
+        assert_eq!(original, copied);
     }
 }
     }
 }