aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.build.yml8
-rw-r--r--src/command/sync_up.rs110
2 files changed, 115 insertions, 3 deletions
diff --git a/.build.yml b/.build.yml
index 8544737..ffd1718 100644
--- a/.build.yml
+++ b/.build.yml
@@ -20,11 +20,13 @@ tasks:
- set_rust: |
cd blog
make set_rust
+ - install_binstall: |
+ curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
- install_coverage_tool: |
- cargo install cargo-tarpaulin
+ cargo binstall cargo-tarpaulin --no-confirm
- install_builders: |
- cargo install cargo-generate-rpm
- cargo install cargo-deb
+ cargo binstall cargo-generate-rpm --no-confirm
+ cargo binstall cargo-deb --no-confirm
- package: |
cd blog
make ci
diff --git a/src/command/sync_up.rs b/src/command/sync_up.rs
index b609c34..14ba070 100644
--- a/src/command/sync_up.rs
+++ b/src/command/sync_up.rs
@@ -44,3 +44,113 @@ impl super::Command for SyncUp {
"\t\t\t\tPushes to the git remote if configured"
}
}
+
+#[cfg(test)]
+mod tests {
+ use std::fs::create_dir_all;
+
+ use super::*;
+ use crate::command::Command;
+ use crate::configuration::Configuration;
+
+ use test_utilities::*;
+
+ #[test]
+ fn test_sync_up_command() {
+ let sync_up = SyncUp::new();
+
+ let test_dir = setup_test_dir();
+ let local_dir = test_dir.join("commandlocal");
+ let remote_dir = test_dir.join("commandremote");
+ create_dir_all(&local_dir).expect("Could not create local test directory");
+ 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 mut configuration = Configuration::new();
+ configuration.data_directory = local_dir.clone();
+ configuration.remote_config = test_dir.join("remoteconfig");
+
+ create_test_file(&local_dir.join("file1.txt"), "I exist");
+ sync_up.execute(None, &configuration, "sync-up")
+ .expect("Could not sync up to remote");
+ assert_file_in_repo_with_contents(&remote_dir_as_string, "file1.txt", "I exist");
+ assert_file_in_repo_does_not_exist(&remote_dir_as_string, "file2.txt");
+
+ create_test_file(&local_dir.join("file2.txt"), "I also exist now, btw");
+ sync_up.execute(None, &configuration, "sync-up")
+ .expect("Could not sync up to remote");
+ assert_file_in_repo_with_contents(&remote_dir_as_string, "file1.txt", "I exist");
+ assert_file_in_repo_with_contents(
+ &remote_dir_as_string,
+ "file2.txt",
+ "I also exist now, btw",
+ );
+ cleanup_test_dir(&test_dir);
+ }
+
+ #[test]
+ fn test_sync_up_fails_with_incorrect_remote() {
+ let sync_up = SyncUp::new();
+
+ let test_dir = setup_test_dir();
+ create_test_file(&test_dir.join("remoteconfig"), "DO NOT WAAANT");
+
+ let mut configuration = Configuration::new();
+ configuration.data_directory = test_dir.clone();
+ configuration.remote_config = test_dir.join("remoteconfig");
+
+ let result = sync_up.execute(None, &configuration, "sync-up");
+ assert!(result.is_err());
+ cleanup_test_dir(&test_dir);
+ }
+
+ #[test]
+ fn test_sync_up_does_not_fail_if_running_as_dependency() {
+ let sync_up = SyncUp::new();
+
+ let test_dir = setup_test_dir();
+ create_test_file(&test_dir.join("remoteconfig"), "DO NOT WAAANT");
+
+ let mut configuration = Configuration::new();
+ configuration.data_directory = test_dir.clone();
+ configuration.remote_config = test_dir.join("remoteconfig");
+
+ let result = sync_up.execute(None, &configuration, "NOPE");
+ assert!(result.is_ok());
+ cleanup_test_dir(&test_dir);
+ }
+
+ #[test]
+ fn sync_up_before_dependencies() {
+ let sync_up = SyncUp::new();
+ let dependencies = sync_up.before_dependencies();
+
+ assert_eq!(dependencies.len(), 0);
+ }
+
+ #[test]
+ fn sync_up_after_dependencies() {
+ let sync_up = SyncUp::new();
+ let dependencies = sync_up.after_dependencies();
+
+ assert_eq!(dependencies.len(), 0);
+ }
+
+ // These two tests feel pointless but I'm doing it for the coverage :p
+
+ #[test]
+ fn sync_up_command_output() {
+ let sync_up = SyncUp::new();
+ sync_up.command();
+ }
+
+ #[test]
+ fn sync_up_help_output() {
+ let sync_up = SyncUp::new();
+ sync_up.help();
+ }
+}