]> git.r.bdr.sh - rbdr/blog/blobdiff - src/generator/static_files.rs
Address more of the formatter comments
[rbdr/blog] / src / generator / static_files.rs
index 680480082a285e1a813726cde99572ece282ee11..ae676a1e43094c94367403817dbb0a9290dfc9a1 100644 (file)
@@ -1,31 +1,71 @@
-use std::fs::{copy, create_dir_all, read_dir};
+use crate::template::Context;
+use crate::utils::recursively_copy;
 use std::io::Result;
 use std::io::Result;
-use std::path::PathBuf;
-use crate::post::Post;
-
-fn recursively_copy(source: &PathBuf, target: &PathBuf) -> Result<()> {
-    let entries = read_dir(source)?;
-    for entry in entries {
-        let entry = entry?;
-        let entry_type = entry.file_type()?;
-        let entry_name = entry.file_name();
-        let entry_source = entry.path();
-        let entry_target = target.join(entry_name);
-
-        if entry_type.is_dir() {
-            create_dir_all(&entry_target)?;
-            recursively_copy(&entry_source, &entry_target)?;
-        } else {
-            copy(&entry_source, &entry_target)?;
-        }
-    }
+use std::path::Path;
 
 
+pub fn generate(source: &Path, _: &Path, target: &Path, _: &Context) -> Result<()> {
+    if source.exists() {
+        return recursively_copy(source, target);
+    }
     Ok(())
 }
 
     Ok(())
 }
 
-pub fn generate(source: &PathBuf, _: &PathBuf, target: &PathBuf, _: &Vec<Post>) -> Result<()> {
-    if source.exists() {
-        return recursively_copy(source, target)
+#[cfg(test)]
+mod tests {
+    use std::collections::HashMap;
+    use std::fs::create_dir_all;
+
+    use super::*;
+
+    use test_utilities::*;
+
+    #[test]
+    fn test_copies_files() {
+        let test_dir = setup_test_dir();
+        let static_dir = test_dir.join("static");
+        let template_dir = test_dir.join("templates");
+        let output_dir = test_dir.join("output");
+
+        create_dir_all(&static_dir).expect("Could not create static directory");
+        create_dir_all(&output_dir).expect("Could not create output directory");
+        create_test_file(&static_dir.join("test.jpg"), "Cool hat");
+
+        let context = HashMap::new();
+
+        generate(&static_dir, &template_dir, &output_dir, &context).expect("Generate failed");
+
+        assert_file_contents(&output_dir.join("test.jpg"), "Cool hat");
+    }
+
+    #[test]
+    fn test_creates_directories_if_they_do_not_exist() {
+        let test_dir = setup_test_dir();
+        let static_dir = test_dir.join("static");
+        let template_dir = test_dir.join("templates");
+        let output_dir = test_dir.join("output");
+
+        create_dir_all(&static_dir).expect("Could not create static directory");
+        create_dir_all(static_dir.join("nested")).expect("Could not create output directory");
+        create_test_file(&static_dir.join("nested/test.mov"), "Cool hats, multiple.");
+
+        let context = HashMap::new();
+
+        generate(&static_dir, &template_dir, &output_dir, &context).expect("Generate failed");
+
+        assert_file_contents(&output_dir.join("nested/test.mov"), "Cool hats, multiple.");
+    }
+
+    #[test]
+    fn test_it_does_not_fail_if_source_directory_does_not_exist() {
+        let test_dir = setup_test_dir();
+        let static_dir = test_dir.join("static");
+        let template_dir = test_dir.join("templates");
+        let output_dir = test_dir.join("output");
+
+        let context = HashMap::new();
+
+        let result = generate(&static_dir, &template_dir, &output_dir, &context);
+
+        assert!(result.is_ok());
     }
     }
-    Ok(())
 }
 }