use freneng::{RenamingEngine, FileRename};
use std::path::PathBuf;
use tokio::fs;
use tempfile::TempDir;
#[tokio::main]
async fn main() {
let engine = RenamingEngine;
let temp_dir = TempDir::new().unwrap();
let test_file = temp_dir.path().join("test.txt");
fs::write(&test_file, "test content").await.unwrap();
println!("=== Test 1: Same-name rename (old_path == new_path) ===");
let same_name_rename = FileRename {
old_path: test_file.clone(),
new_path: test_file.clone(), new_name: "test.txt".to_string(),
};
let result = freneng::perform_renames(&[same_name_rename], false).await.unwrap();
println!(" Successful: {}", result.successful.len());
println!(" Skipped: {}", result.skipped.len());
println!(" Errors: {}", result.errors.len());
if result.successful.is_empty() && result.skipped.len() == 1 {
println!(" ✓ PASS: Same-name rename was skipped, no file operation occurred");
} else {
println!(" ✗ FAIL: Same-name rename was not handled correctly");
}
assert!(test_file.exists(), "File should still exist after same-name skip");
println!(" ✓ File still exists at original location");
println!("\n=== Test 2: Pattern %N.%E (no change) ===");
let files = vec![test_file.clone()];
let preview = engine.generate_preview(&files, "%N.%E").await.unwrap();
println!(" Original file: {}", test_file.file_name().unwrap().to_string_lossy());
println!(" New name: {}", preview.renames[0].new_name);
let old_name = test_file.file_name().unwrap().to_string_lossy();
let new_name = &preview.renames[0].new_name;
let names_same = old_name == new_name.as_str();
if names_same {
println!(" ✓ Pattern %N.%E results in same name (no change)");
let old_path = &preview.renames[0].old_path;
let new_path = &preview.renames[0].new_path;
let paths_same = old_path == new_path;
if paths_same {
println!(" ✓ Old and new paths are identical");
println!(" ✓ This rename would be skipped by perform_renames()");
} else {
println!(" ⚠ Paths differ (but names are same)");
}
} else {
println!(" ✗ FAIL: Pattern %N.%E did not result in same name");
}
println!("\n=== Summary ===");
println!("1. Same-name renames are skipped: ✓");
println!("2. Pattern %N.%E results in no change: {}", if names_same { "✓" } else { "✗" });
println!("\nNOTE: Apply action should be disabled when pattern is %N.%E");
println!(" This requires checking if all renames would result in same names.");
}