use crate::AppPath;
use std::env;
use std::fs;
#[test]
fn test_create_parents() {
let temp_dir = env::temp_dir().join("app_path_test_create_parents");
let _ = fs::remove_dir_all(&temp_dir);
let file_path = AppPath::with(temp_dir.join("logs/app.log"));
file_path.create_parents().unwrap();
assert!(temp_dir.join("logs").exists());
assert!(temp_dir.join("logs").is_dir());
assert!(!file_path.exists());
let nested_file = AppPath::with(temp_dir.join("data/2024/users.db"));
nested_file.create_parents().unwrap();
assert!(temp_dir.join("data").exists());
assert!(temp_dir.join("data/2024").exists());
assert!(temp_dir.join("data/2024").is_dir());
assert!(!nested_file.exists());
let root_file = AppPath::with(temp_dir.join("root.txt"));
root_file.create_parents().unwrap();
assert!(temp_dir.exists());
assert!(!root_file.exists());
let existing_parent_file = AppPath::with(temp_dir.join("logs/another.log"));
existing_parent_file.create_parents().unwrap(); assert!(temp_dir.join("logs").exists());
fs::remove_dir_all(&temp_dir).ok();
}
#[test]
fn test_create_dir() {
let temp_dir = env::temp_dir().join("app_path_test_create_dir");
let _ = fs::remove_dir_all(&temp_dir);
let cache_dir = AppPath::with(temp_dir.join("cache"));
cache_dir.create_dir().unwrap();
assert!(cache_dir.exists());
assert!(cache_dir.is_dir());
let nested_dir = AppPath::with(temp_dir.join("data/backups/daily"));
nested_dir.create_dir().unwrap();
assert!(temp_dir.join("data").exists());
assert!(temp_dir.join("data/backups").exists());
assert!(nested_dir.exists());
assert!(nested_dir.is_dir());
cache_dir.create_dir().unwrap(); assert!(cache_dir.exists());
assert!(cache_dir.is_dir());
let file_like_dir = AppPath::with(temp_dir.join("weird.txt"));
file_like_dir.create_dir().unwrap();
assert!(file_like_dir.exists());
assert!(file_like_dir.is_dir());
let orphan_dir = AppPath::with(temp_dir.join("missing/child"));
orphan_dir.create_dir().unwrap();
assert!(temp_dir.join("missing").exists());
assert!(orphan_dir.exists());
assert!(orphan_dir.is_dir());
fs::remove_dir_all(&temp_dir).ok();
}
#[test]
fn test_new_directory_creation_methods() {
let temp_dir = env::temp_dir().join("app_path_test_new_methods");
let _ = fs::remove_dir_all(&temp_dir);
let file_path = AppPath::with(temp_dir.join("logs/app.log"));
file_path.create_parents().unwrap();
assert!(temp_dir.join("logs").exists());
assert!(temp_dir.join("logs").is_dir());
assert!(!file_path.exists());
let dir_path = AppPath::with(temp_dir.join("data"));
dir_path.create_dir().unwrap();
assert!(dir_path.exists());
assert!(dir_path.is_dir());
let nested_dir = AppPath::with(temp_dir.join("cache/images"));
nested_dir.create_dir().unwrap();
assert!(temp_dir.join("cache").exists());
assert!(temp_dir.join("cache").is_dir());
assert!(nested_dir.exists());
assert!(nested_dir.is_dir());
let existing_dir = AppPath::with(temp_dir.join("data"));
existing_dir.create_dir().unwrap();
fs::remove_dir_all(&temp_dir).ok();
}
#[test]
fn test_create_dir_all_file_extensions() {
let temp_dir = env::temp_dir().join("app_path_test_extensions");
let _ = fs::remove_dir_all(&temp_dir);
let extensions = vec!["txt", "log", "json", "toml", "yml", "db"];
for ext in extensions {
let file_path = AppPath::with(temp_dir.join(format!("files/test.{ext}")));
file_path.create_parents().unwrap();
assert!(temp_dir.join("files").exists());
assert!(temp_dir.join("files").is_dir());
assert!(!file_path.exists());
}
fs::remove_dir_all(&temp_dir).ok();
}
#[test]
fn test_create_dir_all_edge_cases() {
let temp_dir = env::temp_dir().join("app_path_test_edge_cases");
let _ = fs::remove_dir_all(&temp_dir);
let no_ext_path = AppPath::with(temp_dir.join("extensionless_file"));
no_ext_path.create_parents().unwrap();
assert!(temp_dir.exists());
assert!(!no_ext_path.exists());
let no_ext_dir = AppPath::with(temp_dir.join("node_modules"));
no_ext_dir.create_dir().unwrap();
assert!(no_ext_dir.exists());
assert!(no_ext_dir.is_dir());
let unusual_file = AppPath::with(temp_dir.join("backup/myfile.special"));
unusual_file.create_parents().unwrap();
assert!(temp_dir.join("backup").exists());
assert!(temp_dir.join("backup").is_dir());
assert!(!unusual_file.exists());
let multi_ext_file = AppPath::with(temp_dir.join("archives/file.tar.gz"));
multi_ext_file.create_parents().unwrap();
assert!(temp_dir.join("archives").exists());
assert!(temp_dir.join("archives").is_dir());
assert!(!multi_ext_file.exists());
let root_file = AppPath::with(temp_dir.join("root.txt"));
root_file.create_parents().unwrap();
let conflict_path = temp_dir.join("conflict.txt");
fs::create_dir_all(&temp_dir).unwrap();
fs::write(&conflict_path, "content").unwrap();
let conflict_apppath = AppPath::from(&conflict_path);
assert!(conflict_apppath.create_parents().is_ok());
fs::remove_dir_all(&temp_dir).ok();
}
#[test]
fn test_create_dir_all_preserves_existing_behavior() {
let temp_dir = env::temp_dir().join("app_path_test_backward_compat");
let _ = fs::remove_dir_all(&temp_dir);
let deep_file = AppPath::with(temp_dir.join("deep/nested/dir/file.txt"));
deep_file.create_parents().unwrap();
assert!(temp_dir.join("deep").exists());
assert!(temp_dir.join("deep/nested").exists());
assert!(temp_dir.join("deep/nested/dir").exists());
assert!(!deep_file.exists());
fs::remove_dir_all(&temp_dir).ok();
}