#[cfg(test)]
mod tests {
use crate::core::{Effect, Msg};
use crate::core::effects::ResetMode;
use std::path::PathBuf;
#[test]
fn test_effect_none() {
let effect = Effect::None;
assert!(effect.is_none());
}
#[test]
fn test_effect_batch() {
let effects = vec![
Effect::RefreshStatus,
Effect::RefreshBranches,
];
let batch = Effect::batch(effects);
match batch {
Effect::Batch(v) => assert_eq!(v.len(), 2),
_ => panic!("Expected Batch"),
}
}
#[test]
fn test_effect_git_stage() {
let path = PathBuf::from("/test/file.rs");
let effect = Effect::GitStage { path: path.clone() };
match effect {
Effect::GitStage { path: p } => assert_eq!(p, path),
_ => panic!("Expected GitStage"),
}
}
#[test]
fn test_effect_git_commit() {
let effect = Effect::GitCommit {
message: "test".to_string(),
amend: false,
author_name: Some("Test".to_string()),
author_email: Some("test@example.com".to_string()),
};
match effect {
Effect::GitCommit { message, amend, .. } => {
assert_eq!(message, "test");
assert!(!amend);
}
_ => panic!("Expected GitCommit"),
}
}
#[test]
fn test_effect_git_reset_modes() {
assert_eq!(format!("{:?}", ResetMode::Soft), "Soft");
assert_eq!(format!("{:?}", ResetMode::Mixed), "Mixed");
assert_eq!(format!("{:?}", ResetMode::Hard), "Hard");
}
#[test]
fn test_msg_tick() {
let msg = Msg::Tick;
assert!(matches!(msg, Msg::Tick));
}
#[test]
fn test_msg_request_stage() {
let msg = Msg::RequestStage { path: "/test".to_string() };
match msg {
Msg::RequestStage { path } => assert_eq!(path, "/test"),
_ => panic!("Expected RequestStage"),
}
}
#[test]
fn test_msg_stage_lifecycle() {
let request = Msg::RequestStage { path: "file.rs".to_string() };
let success = Msg::StageSuccess { path: "file.rs".to_string() };
let failed = Msg::StageFailed {
path: "file.rs".to_string(),
error: "Permission denied".to_string()
};
assert!(matches!(request, Msg::RequestStage { .. }));
assert!(matches!(success, Msg::StageSuccess { .. }));
assert!(matches!(failed, Msg::StageFailed { .. }));
}
#[test]
fn test_msg_rebase_outcome() {
use crate::core::msg::RebaseOutcome;
let completed = RebaseOutcome::Completed;
let paused_edit = RebaseOutcome::PausedForEdit;
let paused_reword = RebaseOutcome::PausedForReword {
commit_hash: "abc123".to_string(),
current_message: "test".to_string(),
};
let conflicts = RebaseOutcome::Conflicts {
files: vec!["a.rs".to_string(), "b.rs".to_string()],
};
assert!(matches!(completed, RebaseOutcome::Completed));
assert!(matches!(paused_edit, RebaseOutcome::PausedForEdit));
assert!(matches!(paused_reword, RebaseOutcome::PausedForReword { .. }));
assert!(matches!(conflicts, RebaseOutcome::Conflicts { .. }));
}
}