aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/command/add_remote.rs67
-rw-r--r--src/command/help.rs2
-rw-r--r--src/command/remove_remote.rs59
-rw-r--r--src/command/version.rs48
-rw-r--r--src/remote/mod.rs109
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);
+ }
}