diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/command/add_remote.rs | 67 | ||||
| -rw-r--r-- | src/command/help.rs | 2 | ||||
| -rw-r--r-- | src/command/remove_remote.rs | 59 | ||||
| -rw-r--r-- | src/command/version.rs | 48 | ||||
| -rw-r--r-- | src/remote/mod.rs | 109 |
5 files changed, 284 insertions, 1 deletions
diff --git a/src/command/add_remote.rs b/src/command/add_remote.rs index e5ca591..a40b184 100644 --- a/src/command/add_remote.rs +++ b/src/command/add_remote.rs @@ -42,3 +42,70 @@ impl super::Command for AddRemote { "<git_url>\t\tAdds or updates a git remote to sync with" } } + +#[cfg(test)] +mod tests { + + use super::*; + use crate::command::Command; + use crate::configuration::Configuration; + + use test_utilities::*; + + #[test] + fn test_add_remote_command() { + let add_remote = AddRemote::new(); + + // Create all directories + let test_dir = setup_test_dir(); + let remote_config = test_dir.join("blogremote"); + assert!(!remote_config.exists()); + + let mut configuration = Configuration::new(); + configuration.config_directory = test_dir.clone(); + configuration.remote_config = remote_config.clone(); + add_remote + .execute(Some(&"beep".to_string()), &configuration, "add_remote") + .expect("Could not call add_remote"); + assert_file_contents(&remote_config, "beep"); + cleanup_test_dir(&test_dir); + } + + #[test] + fn test_fails_if_no_remote_sent() { + let add_remote = AddRemote::new(); + let configuration = Configuration::new(); + let result = add_remote.execute(None, &configuration, "add_remote"); + assert!(result.is_err()); + } + + #[test] + fn add_remote_before_dependencies() { + let add_remote = AddRemote::new(); + let dependencies = add_remote.before_dependencies(); + + assert_eq!(dependencies.len(), 0); + } + + #[test] + fn add_remote_after_dependencies() { + let add_remote = AddRemote::new(); + let dependencies = add_remote.after_dependencies(); + + assert_eq!(dependencies.len(), 0); + } + + // These two tests feel pointless but I'm doing it for the coverage :p + + #[test] + fn add_remote_command_output() { + let add_remote = AddRemote::new(); + add_remote.command(); + } + + #[test] + fn add_remote_help_output() { + let add_remote = AddRemote::new(); + add_remote.help(); + } +} diff --git a/src/command/help.rs b/src/command/help.rs index da5831c..c018aa7 100644 --- a/src/command/help.rs +++ b/src/command/help.rs @@ -47,7 +47,7 @@ mod tests { use crate::configuration::Configuration; #[test] - fn test_add_command() { + fn test_help_command() { let help = Help::new(); let configuration = Configuration::new(); diff --git a/src/command/remove_remote.rs b/src/command/remove_remote.rs index ee1dfde..0d274d7 100644 --- a/src/command/remove_remote.rs +++ b/src/command/remove_remote.rs @@ -31,3 +31,62 @@ impl super::Command for RemoveRemote { "\t\t\tRemoves the git remote" } } + +#[cfg(test)] +mod tests { + + use super::*; + use crate::command::Command; + use crate::configuration::Configuration; + + use test_utilities::*; + + #[test] + fn test_remove_remote_command() { + let remove_remote = RemoveRemote::new(); + + // Create all directories + let test_dir = setup_test_dir(); + let remote_config = test_dir.join("blogremote"); + create_test_file(&remote_config, "boop"); + assert!(remote_config.exists()); + + let mut configuration = Configuration::new(); + configuration.remote_config = remote_config.clone(); + remove_remote + .execute(None, &configuration, "") + .expect("Could not call remove_remote"); + assert!(!remote_config.exists()); + cleanup_test_dir(&test_dir); + } + + #[test] + fn remove_remote_before_dependencies() { + let remove_remote = RemoveRemote::new(); + let dependencies = remove_remote.before_dependencies(); + + assert_eq!(dependencies.len(), 0); + } + + #[test] + fn remove_remote_after_dependencies() { + let remove_remote = RemoveRemote::new(); + let dependencies = remove_remote.after_dependencies(); + + assert_eq!(dependencies.len(), 0); + } + + // These two tests feel pointless but I'm doing it for the coverage :p + + #[test] + fn remove_remote_command_output() { + let remove_remote = RemoveRemote::new(); + remove_remote.command(); + } + + #[test] + fn remove_remote_help_output() { + let remove_remote = RemoveRemote::new(); + remove_remote.help(); + } +} diff --git a/src/command/version.rs b/src/command/version.rs index 94eb92e..53328e6 100644 --- a/src/command/version.rs +++ b/src/command/version.rs @@ -32,3 +32,51 @@ impl super::Command for Version { "\t\t\t\tPrints the version" } } + +#[cfg(test)] +mod tests { + + use super::*; + use crate::command::Command; + use crate::configuration::Configuration; + + #[test] + fn test_version_command() { + let version = Version::new(); + + let configuration = Configuration::new(); + version + .execute(None, &configuration, "") + .expect("Could not call version"); + } + + #[test] + fn version_before_dependencies() { + let version = Version::new(); + let dependencies = version.before_dependencies(); + + assert_eq!(dependencies.len(), 0); + } + + #[test] + fn version_after_dependencies() { + let version = Version::new(); + let dependencies = version.after_dependencies(); + + assert_eq!(dependencies.len(), 0); + } + + // These two tests feel pointless but I'm doing it for the coverage :p + + #[test] + fn version_command_output() { + let version = Version::new(); + version.command(); + } + + #[test] + fn version_help_output() { + let version = Version::new(); + version.help(); + } +} diff --git a/src/remote/mod.rs b/src/remote/mod.rs index 1a2421d..74f4c48 100644 --- a/src/remote/mod.rs +++ b/src/remote/mod.rs @@ -71,6 +71,8 @@ fn read_remote(file_path: &Path) -> Option<String> { #[cfg(test)] mod tests { use std::fs::create_dir_all; + use std::io::Write; + use std::path::PathBuf; use super::*; @@ -134,6 +136,51 @@ mod tests { } #[test] + fn test_syncs_remote_up_even_if_directory_does_not_exist() { + let test_dir = setup_test_dir(); + let local_dir = test_dir.join("modlocal"); + let remote_dir = test_dir.join("modremote"); + create_dir_all(&remote_dir).expect("Could not create remote test directory"); + + create_remote(&remote_dir); + + let remote_dir_as_string = remote_dir.display().to_string(); + create_test_file(&test_dir.join("remoteconfig"), &remote_dir_as_string); + + sync_up(&local_dir, &test_dir.join("remoteconfig")).expect("Could not sync up to remote"); + assert!(local_dir.exists()); + cleanup_test_dir(&test_dir); + } + + #[test] + fn test_sync_up_down_fails_if_local_not_creatable() { + let test_dir = setup_test_dir(); + let local_dir = &PathBuf::from("/lasjkdlaksjdklasjdlaks/asldkj/asjdlaksdj"); + let remote_dir = test_dir.join("modremote"); + create_dir_all(&remote_dir).expect("Could not create remote test directory"); + + create_remote(&remote_dir); + + let remote_dir_as_string = remote_dir.display().to_string(); + create_test_file(&test_dir.join("remoteconfig"), &remote_dir_as_string); + + let result = sync_up(&local_dir, &test_dir.join("remoteconfig")); + assert!(result.is_err()); + cleanup_test_dir(&test_dir); + } + + #[test] + fn test_sync_up_fails_on_invalid_strategies() { + let test_dir = setup_test_dir(); + let local_dir = test_dir.join("modlocal"); + create_test_file(&test_dir.join("remoteconfig"), "AAAAAH"); + + let result = sync_up(&local_dir, &test_dir.join("remoteconfig")); + assert!(result.is_err()); + cleanup_test_dir(&test_dir); + } + + #[test] fn test_syncs_remote_down() { let test_dir = setup_test_dir(); let local_dir = test_dir.join("modownlocal"); @@ -166,4 +213,66 @@ mod tests { assert_file_contents(&local_dir.join("file2.txt"), "I also exist, but remotely"); cleanup_test_dir(&test_dir); } + + #[test] + fn test_syncs_remote_down_even_if_directory_does_not_exist() { + let test_dir = setup_test_dir(); + let local_dir = test_dir.join("modlocal"); + let remote_dir = test_dir.join("modremote"); + create_dir_all(&remote_dir).expect("Could not create remote test directory"); + + create_remote(&remote_dir); + + let remote_dir_as_string = remote_dir.display().to_string(); + create_test_file(&test_dir.join("remoteconfig"), &remote_dir_as_string); + + commit_file_to_remote(&remote_dir_as_string, "onions", "Make me cry"); + + sync_down(&local_dir, &test_dir.join("remoteconfig")).expect("Could not sync up to remote"); + assert_file_contents(&local_dir.join("onions"), "Make me cry"); + cleanup_test_dir(&test_dir); + } + + #[test] + fn test_sync_down_fails_if_local_not_creatable() { + let test_dir = setup_test_dir(); + let local_dir = &PathBuf::from("/lasjkdlaksjdklasjdlaks/asldkj/asjdlaksdj"); + let remote_dir = test_dir.join("modremote"); + create_dir_all(&remote_dir).expect("Could not create remote test directory"); + + create_remote(&remote_dir); + + let remote_dir_as_string = remote_dir.display().to_string(); + create_test_file(&test_dir.join("remoteconfig"), &remote_dir_as_string); + + let result = sync_down(&local_dir, &test_dir.join("remoteconfig")); + assert!(result.is_err()); + cleanup_test_dir(&test_dir); + } + + #[test] + fn test_sync_down_fails_on_invalid_strategies() { + let test_dir = setup_test_dir(); + let local_dir = test_dir.join("modlocal"); + create_test_file(&test_dir.join("remoteconfig"), "AAAAAH"); + + let result = sync_down(&local_dir, &test_dir.join("remoteconfig")); + assert!(result.is_err()); + cleanup_test_dir(&test_dir); + } + + #[test] + fn test_it_should_fail_if_remote_is_invalid() { + let test_dir = setup_test_dir(); + let bad_file_path = &test_dir.join("BADFILE OH NO"); + let invalid_bytes = vec![0xFF, 0xFF]; + + let mut bad_file = File::create(&bad_file_path).expect("Could not create bad file."); + bad_file + .write_all(&invalid_bytes) + .expect("Could not write bad bytes to bad file."); + + assert_eq!(read_remote(&bad_file_path), None); + cleanup_test_dir(&test_dir); + } } |