From 262dc8608118ddf079287e18ff0f10190c078b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?= Date: Thu, 16 Jan 2025 19:23:56 +0000 Subject: [PATCH] Add tests for the last three commits --- src/docker_client.rs | 93 ++++++++++++++++++++++++++++++++++++++++++++ src/rails_new.rs | 48 +++++++++++++++++++++++ 2 files changed, 141 insertions(+) diff --git a/src/docker_client.rs b/src/docker_client.rs index 0f63b64..98975cd 100644 --- a/src/docker_client.rs +++ b/src/docker_client.rs @@ -206,6 +206,72 @@ mod tests { ); } + #[test] + fn build_image_with_rebuild_flag() { + let command = DockerClient::build_image("3.2.3", Some("7.1.3"), None, None, true); + + let args: Vec<&OsStr> = command.get_args().collect(); + + assert_eq!( + args, + &[ + "build", + "--no-cache", + "--build-arg", + "RUBY_VERSION=3.2.3", + "--build-arg", + "RAILS_VERSION=7.1.3", + "-t", + "rails-new-3.2.3-7.1.3", + "-", + ] + ); + } + + #[test] + fn build_image_without_rails_version() { + let command = DockerClient::build_image("3.2.3", None, None, None, false); + + let args: Vec<&OsStr> = command.get_args().collect(); + + assert_eq!( + args, + &[ + "build", + "--build-arg", + "RUBY_VERSION=3.2.3", + "-t", + "rails-new-3.2.3", + "-", + ] + ); + } + + #[test] + fn build_image_with_both_ids() { + let command = DockerClient::build_image("3.2.3", Some("7.1.3"), Some(1000), Some(1000), false); + + let args: Vec<&OsStr> = command.get_args().collect(); + + assert_eq!( + args, + &[ + "build", + "--build-arg", + "RUBY_VERSION=3.2.3", + "--build-arg", + "RAILS_VERSION=7.1.3", + "--build-arg", + "USER_ID=1000", + "--build-arg", + "GROUP_ID=1000", + "-t", + "rails-new-3.2.3-7.1.3", + "-", + ] + ); + } + #[test] fn run_image() { let command = DockerClient::run_image("3.2.3", Some("7.1.3"), vec!["my_app".to_string()]); @@ -235,6 +301,33 @@ mod tests { ); } + #[test] + fn run_image_without_rails_version() { + let command = DockerClient::run_image("3.2.3", None, vec!["my_app".to_string()]); + + let binding = current_dir().unwrap(); + let absolute_path = canonicalize_os_path(&binding).unwrap(); + let current_dir = absolute_path.to_str().unwrap(); + + let args: Vec<&OsStr> = command.get_args().collect(); + + assert_eq!( + args, + &[ + "run", + "--rm", + "-v", + &format!("{}:{}", current_dir, current_dir), + "-w", + current_dir, + "rails-new-3.2.3", + "rails", + "new", + "my_app", + ] + ); + } + #[test] fn get_help() { let command = DockerClient::get_help("3.2.3", Some("7.1.3")); diff --git a/src/rails_new.rs b/src/rails_new.rs index 61c601b..67f7b34 100644 --- a/src/rails_new.rs +++ b/src/rails_new.rs @@ -73,4 +73,52 @@ mod tests { Ok(()) } + + #[test] + fn custom_ruby_version() -> Result<(), Box> { + use clap::CommandFactory; + + let m = Cli::command().get_matches_from(vec!["rails-new", "--ruby-version", "3.2.0", "my_app"]); + let ruby_version = m.get_one::("ruby_version").unwrap(); + assert_eq!(ruby_version, "3.2.0"); + + // Test short form + let m = Cli::command().get_matches_from(vec!["rails-new", "-u", "3.2.0", "my_app"]); + let ruby_version = m.get_one::("ruby_version").unwrap(); + assert_eq!(ruby_version, "3.2.0"); + + Ok(()) + } + + #[test] + fn rails_version_flag() -> Result<(), Box> { + use clap::CommandFactory; + + let m = Cli::command().get_matches_from(vec!["rails-new", "--rails-version", "7.1.0", "my_app"]); + let rails_version = m.get_one::("rails_version").unwrap(); + assert_eq!(rails_version, "7.1.0"); + + // Test short form + let m = Cli::command().get_matches_from(vec!["rails-new", "-r", "7.1.0", "my_app"]); + let rails_version = m.get_one::("rails_version").unwrap(); + assert_eq!(rails_version, "7.1.0"); + + Ok(()) + } + + #[test] + fn rebuild_flag() -> Result<(), Box> { + use clap::CommandFactory; + + let m = Cli::command().get_matches_from(vec!["rails-new", "--rebuild", "my_app"]); + let rebuild = m.get_flag("rebuild"); + assert!(rebuild); + + // Test default value (false) + let m = Cli::command().get_matches_from(vec!["rails-new", "my_app"]); + let rebuild = m.get_flag("rebuild"); + assert!(!rebuild); + + Ok(()) + } }