114 lines
3.3 KiB
Rust
114 lines
3.3 KiB
Rust
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());
|
|
}
|
|
}
|