diff --git a/tests/models_test.rs b/tests/models_test.rs new file mode 100644 index 0000000..6142875 --- /dev/null +++ b/tests/models_test.rs @@ -0,0 +1,54 @@ +#[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); + } +}