diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-01-06 21:55:00 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-01-06 21:55:00 +0100 |
| commit | 40a5de55c35d6481fd538f4c5205e47c201e3289 (patch) | |
| tree | 6aa5ec9926460f26aba621e64047a44e70fd94ef /src/archiver | |
| parent | 440adc8c924f451936c7f5f2fa2dcd97fffb5573 (diff) | |
Add tests for the archivers
Diffstat (limited to 'src/archiver')
| -rw-r--r-- | src/archiver/gemini.rs | 64 | ||||
| -rw-r--r-- | src/archiver/gopher.rs | 64 | ||||
| -rw-r--r-- | src/archiver/raw.rs | 39 |
3 files changed, 167 insertions, 0 deletions
diff --git a/src/archiver/gemini.rs b/src/archiver/gemini.rs index 298ace8..aa3ac29 100644 --- a/src/archiver/gemini.rs +++ b/src/archiver/gemini.rs @@ -20,3 +20,67 @@ pub fn archive( } Ok(()) } + +#[cfg(test)] +mod tests { + use std::collections::HashMap; + use std::fs::create_dir_all; + + use super::*; + use crate::template::Value; + + use test_utilities::*; + + #[test] + fn test_renders_the_context_into_the_template() { + let test_dir = setup_test_dir(); + let template_dir = test_dir.join("template"); + let output_dir = test_dir.join("output"); + create_dir_all(&output_dir).expect("Could not create output test directory"); + create_dir_all(&template_dir).expect("Could not create template test directory"); + + create_test_file(&template_dir.join("index.gmi"), "Simple {{= test }}"); + + let context: Context = + HashMap::from([("test".to_string(), Value::String("things".to_string()))]); + + archive(&test_dir, &template_dir, &output_dir, &context).expect("Archive failed"); + + assert_file_contents(&output_dir.join("index.gmi"), "Simple things"); + } + + #[test] + fn test_fails_if_template_is_malformed() { + let test_dir = setup_test_dir(); + let template_dir = test_dir.join("template"); + let output_dir = test_dir.join("output"); + create_dir_all(&output_dir).expect("Could not create output test directory"); + create_dir_all(&template_dir).expect("Could not create template test directory"); + + create_test_file(&template_dir.join("index.gmi"), "Simple {{ test }}"); + + let context: Context = + HashMap::from([("test".to_string(), Value::String("things".to_string()))]); + + let result = archive(&test_dir, &template_dir, &output_dir, &context); + + assert!(result.is_err()); + } + + #[test] + fn test_fails_if_output_folder_is_not_writable() { + let test_dir = setup_test_dir(); + let template_dir = test_dir.join("template"); + let output_dir = test_dir.join("/unwritable/folder/please"); + create_dir_all(&template_dir).expect("Could not create template test directory"); + + create_test_file(&template_dir.join("index.gmi"), "Simple {{= test }}"); + + let context: Context = + HashMap::from([("test".to_string(), Value::String("things".to_string()))]); + + let result = archive(&test_dir, &template_dir, &output_dir, &context); + + assert!(result.is_err()); + } +} diff --git a/src/archiver/gopher.rs b/src/archiver/gopher.rs index 454e8c4..fe37616 100644 --- a/src/archiver/gopher.rs +++ b/src/archiver/gopher.rs @@ -20,3 +20,67 @@ pub fn archive( } Ok(()) } + +#[cfg(test)] +mod tests { + use std::collections::HashMap; + use std::fs::create_dir_all; + + use super::*; + use crate::template::Value; + + use test_utilities::*; + + #[test] + fn test_renders_the_context_into_the_template() { + let test_dir = setup_test_dir(); + let template_dir = test_dir.join("template"); + let output_dir = test_dir.join("output"); + create_dir_all(&output_dir).expect("Could not create output test directory"); + create_dir_all(&template_dir).expect("Could not create template test directory"); + + create_test_file(&template_dir.join("index.gph"), "Simple {{= test }}"); + + let context: Context = + HashMap::from([("test".to_string(), Value::String("things".to_string()))]); + + archive(&test_dir, &template_dir, &output_dir, &context).expect("Archive failed"); + + assert_file_contents(&output_dir.join("index.gph"), "Simple things"); + } + + #[test] + fn test_fails_if_template_is_malformed() { + let test_dir = setup_test_dir(); + let template_dir = test_dir.join("template"); + let output_dir = test_dir.join("output"); + create_dir_all(&output_dir).expect("Could not create output test directory"); + create_dir_all(&template_dir).expect("Could not create template test directory"); + + create_test_file(&template_dir.join("index.gph"), "Simple {{ test }}"); + + let context: Context = + HashMap::from([("test".to_string(), Value::String("things".to_string()))]); + + let result = archive(&test_dir, &template_dir, &output_dir, &context); + + assert!(result.is_err()); + } + + #[test] + fn test_fails_if_output_folder_is_not_writable() { + let test_dir = setup_test_dir(); + let template_dir = test_dir.join("template"); + let output_dir = test_dir.join("/gopherunwritable/folder/please"); + create_dir_all(&template_dir).expect("Could not create template test directory"); + + create_test_file(&template_dir.join("index.gph"), "Simple {{= test }}"); + + let context: Context = + HashMap::from([("test".to_string(), Value::String("things".to_string()))]); + + let result = archive(&test_dir, &template_dir, &output_dir, &context); + + assert!(result.is_err()); + } +} diff --git a/src/archiver/raw.rs b/src/archiver/raw.rs index ce7ecb7..8641177 100644 --- a/src/archiver/raw.rs +++ b/src/archiver/raw.rs @@ -9,3 +9,42 @@ pub fn archive(archive_directory: &Path, _: &Path, target: &Path, _: &Context) - } Ok(()) } + +#[cfg(test)] +mod tests { + use std::collections::HashMap; + use std::fs::create_dir_all; + + use super::*; + use crate::template::Value; + + use test_utilities::*; + + #[test] + fn test_copies_files() { + let test_dir = setup_test_dir(); + let archive_dir = test_dir.join("archive"); + let output_dir = test_dir.join("output"); + create_dir_all(&archive_dir).expect("Could not create archive test directory"); + create_dir_all(&output_dir).expect("Could not create output test directory"); + + create_test_file(&archive_dir.join("🤠"), "beep boop boop beep"); + + let context: Context = HashMap::new(); + + archive(&archive_dir, &test_dir, &output_dir, &context).expect("Archive failed"); + + assert_file_contents(&output_dir.join("🤠"), "beep boop boop beep"); + } + + #[test] + fn test_ignores_if_no_archive() { + let test_dir = setup_test_dir(); + let archive_dir = test_dir.join("archive"); + let output_dir = test_dir.join("output"); + + let context: Context = HashMap::new(); + + archive(&archive_dir, &test_dir, &output_dir, &context).expect("Archive failed"); + } +} |