From 21049a08bf111ed4c77a9f630965c9e475cbde22 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Wed, 4 Feb 2026 09:53:09 +0000 Subject: [PATCH] Initial upload: DotMigrate dotfiles migration tool with CI/CD --- tests/unit_tests.rs | 113 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 tests/unit_tests.rs diff --git a/tests/unit_tests.rs b/tests/unit_tests.rs new file mode 100644 index 0000000..5cf4b5d --- /dev/null +++ b/tests/unit_tests.rs @@ -0,0 +1,113 @@ +use std::path::PathBuf; +use tempfile::TempDir; + +#[cfg(test)] +mod config_tests { + use super::*; + use crate::config::{Config, Dotfile}; + use crate::cli::SyncBackend; + + #[test] + fn test_config_default() { + let config = Config::default(); + assert_eq!(config.version, "1.0"); + assert_eq!(config.sync.branch, "main"); + assert!(config.dotfiles.is_empty()); + } + + #[test] + fn test_config_serialization() { + let config = Config::default(); + let serialized = serde_yaml::to_string(&config).unwrap(); + let deserialized: Config = serde_yaml::from_str(&serialized).unwrap(); + assert_eq!(config.version, deserialized.version); + } + + #[test] + fn test_dotfile_serialization() { + let dotfile = Dotfile { + path: PathBuf::from("/home/user/.vimrc"), + content_hash: Some("abc123".to_string()), + permissions: Some(0o644), + platform: Some("linux".to_string()), + template: Some(false), + excludes: Vec::new(), + }; + + let serialized = serde_yaml::to_string(&dotfile).unwrap(); + let deserialized: Dotfile = serde_yaml::from_str(&serialized).unwrap(); + assert_eq!(dotfile.path, deserialized.path); + assert_eq!(dotfile.content_hash, deserialized.content_hash); + } + + #[test] + fn test_config_default_for_backend() { + let git_config = Config::default_for_backend(SyncBackend::Git); + assert_eq!(git_config.sync.backend, Some(SyncBackend::Git)); + + let s3_config = Config::default_for_backend(SyncBackend::S3); + assert_eq!(s3_config.sync.backend, Some(SyncBackend::S3)); + } +} + +#[cfg(test)] +mod merge_tests { + use super::*; + use crate::merge::Merger; + + #[test] + fn test_diff_identical_files() { + let merger = Merger::new(); + let a = "line1\nline2\nline3"; + let b = "line1\nline2\nline3"; + let diff = merger.diff(&PathBuf::from("a"), &PathBuf::from("b")).unwrap(); + assert!(diff.iter().all(|l| l.starts_with(" "))); + } + + #[test] + fn test_diff_different_files() { + let merger = Merger::new(); + let a = "line1\nline2\nline3"; + let b = "line1\nmodified\nline3"; + let diff = merger.diff(&PathBuf::from("a"), &PathBuf::from("b")).unwrap(); + assert!(diff.iter().any(|l| l.starts_with("- "))); + assert!(diff.iter().any(|l| l.starts_with("+ "))); + } +} + +#[cfg(test)] +mod detection_tests { + use super::*; + use crate::detect::Detector; + use crate::config::Config; + + #[test] + fn test_platform_detection() { + use crate::cli::Platform; + let platform = Platform::current(); + match platform { + Platform::Linux | Platform::Macos | Platform::Wsl => {} + } + } + + #[test] + fn test_detector_new() { + let config = Config::default(); + let detector = Detector::new(&config); + assert!(!detector.home_dir.as_os_str().is_empty()); + } +} + +#[cfg(test)] +mod backup_tests { + use super::*; + use crate::backup::BackupManager; + + #[test] + fn test_backup_manager_new() { + let temp_dir = TempDir::new().unwrap(); + let backup_dir = temp_dir.path().to_path_buf(); + let manager = BackupManager::new(&backup_dir); + assert!(backup_dir.exists()); + } +}