test: add integration tests for --rules-dir feature

- 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)
This commit is contained in:
Jeremiah Russell
2025-10-21 17:53:37 +01:00
committed by Jeremiah Russell
parent bcb93fd68f
commit e914e492e8

View File

@@ -77,6 +77,76 @@ fn test_init_dry_run_new_setup() {
temp_dir.close().unwrap(); 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] #[test]
fn test_init_dry_run_with_credential_file() { fn test_init_dry_run_with_credential_file() {
let temp_dir = assert_fs::TempDir::new().unwrap(); let temp_dir = assert_fs::TempDir::new().unwrap();