#[cfg(test)] mod tests { use crate::models::{AuthorStats, CommitFrequency, RepositoryInfo}; use serde_json; #[test] fn test_author_stats_serde() { let stats = AuthorStats { name: "Test User".to_string(), email: "test@example.com".to_string(), commits: 10, lines_added: 100, lines_removed: 50, net_change: 50, files_changed: 5, first_commit: "2024-01-01T00:00:00Z".to_string(), last_commit: "2024-01-15T00:00:00Z".to_string(), active_days: 5, average_commits_per_day: 2.0, busiest_day: "Monday".to_string(), busiest_day_count: 5, commit_messages: vec!["feat: add feature".to_string()], }; let json = serde_json::to_string(&stats).unwrap(); let deserialized: AuthorStats = serde_json::from_str(&json).unwrap(); assert_eq!(deserialized.name, stats.name); assert_eq!(deserialized.commits, stats.commits); } #[test] fn test_repository_info_serde() { let info = RepositoryInfo { path: "/test/repo".to_string(), branch: Some("main".to_string()), remote_url: Some("https://github.com/test/repo".to_string()), total_commits: 100, total_authors: 5, repository_age_days: 365, }; let json = serde_json::to_string(&info).unwrap(); let deserialized: RepositoryInfo = serde_json::from_str(&json).unwrap(); assert_eq!(deserialized.path, info.path); assert_eq!(deserialized.total_commits, info.total_commits); } #[test] fn test_commit_frequency_defaults() { let freq = CommitFrequency::default(); assert_eq!(freq.total_commits, 0); assert_eq!(freq.commits_per_day, 0.0); } }