From e914e492e871a4aa0578d840b31fffa38329f891 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 21 Oct 2025 17:53:37 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20test:=20add=20integration=20tests?= =?UTF-8?q?=20for=20--rules-dir=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add test_init_with_separate_rules_directory to verify rules created in custom location - Add test_init_rules_dir_dry_run to verify dry-run behavior with --rules-dir - Verify config file contains correct rules path when using separate directory - All 12 init integration tests passing (11 run, 1 ignored) --- tests/init_integration_tests.rs | 70 +++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/tests/init_integration_tests.rs b/tests/init_integration_tests.rs index c0a5f06..4d55f1f 100644 --- a/tests/init_integration_tests.rs +++ b/tests/init_integration_tests.rs @@ -77,6 +77,76 @@ fn test_init_dry_run_new_setup() { temp_dir.close().unwrap(); } +#[test] +fn test_init_with_separate_rules_directory() { + let temp_dir = assert_fs::TempDir::new().unwrap(); + let config_dir = temp_dir.path().join("config"); + let rules_dir = temp_dir.path().join("rules"); + + let mut cmd = Command::cargo_bin("cull-gmail").unwrap(); + cmd.args([ + "init", + "--config-dir", + &format!("c:{}", config_dir.to_string_lossy()), + "--rules-dir", + &format!("c:{}", rules_dir.to_string_lossy()), + ]); + + cmd.assert() + .success() + .stdout(predicate::str::contains( + "Initialization completed successfully!", + )); + + // Verify config directory was created + assert!(config_dir.exists()); + assert!(config_dir.join("cull-gmail.toml").exists()); + assert!(config_dir.join("gmail1").exists()); + + // Verify rules directory was created separately + assert!(rules_dir.exists()); + assert!(rules_dir.join("rules.toml").exists()); + + // Verify rules.toml is NOT in config directory + assert!(!config_dir.join("rules.toml").exists()); + + // Verify config file references the correct rules path + let config_content = std::fs::read_to_string(config_dir.join("cull-gmail.toml")).unwrap(); + let rules_path = rules_dir.join("rules.toml"); + assert!(config_content.contains(&rules_path.to_string_lossy().to_string())); + + temp_dir.close().unwrap(); +} + +#[test] +fn test_init_rules_dir_dry_run() { + let temp_dir = assert_fs::TempDir::new().unwrap(); + let config_dir = temp_dir.path().join("config"); + let rules_dir = temp_dir.path().join("rules"); + + let mut cmd = Command::cargo_bin("cull-gmail").unwrap(); + cmd.args([ + "init", + "--config-dir", + &format!("c:{}", config_dir.to_string_lossy()), + "--rules-dir", + &format!("c:{}", rules_dir.to_string_lossy()), + "--dry-run", + ]); + + cmd.assert() + .success() + .stdout(predicate::str::contains("DRY RUN: No changes will be made")) + .stdout(predicate::str::contains("Create directory:")) + .stdout(predicate::str::contains("rules.toml")); + + // Verify no directories were created in dry-run + assert!(!config_dir.exists()); + assert!(!rules_dir.exists()); + + temp_dir.close().unwrap(); +} + #[test] fn test_init_dry_run_with_credential_file() { let temp_dir = assert_fs::TempDir::new().unwrap();