use super::*;
fn entry(id: &str, name: &str) -> PrimaryAgentEntry {
PrimaryAgentEntry {
id: id.to_string(),
name: name.to_string(),
description: String::new(),
prompt: format!("{name} prompt"),
}
}
#[test]
fn tui_primary_agent_initial_selection_is_none() {
let mut state = MissionControlState::default();
state.set_primary_agents(vec![entry("alpha", "Alpha")]);
assert_eq!(state.selected_primary_agent_name(), "None");
assert!(state.selected_primary_agent_profile().is_none());
}
#[test]
fn tui_primary_agent_cycle_order_includes_none_and_profiles() {
let mut state = MissionControlState::default();
state.set_primary_agents(vec![entry("alpha", "Alpha"), entry("zeta", "Zeta")]);
assert_eq!(state.selected_primary_agent_name(), "None");
state.cycle_primary_agent();
assert_eq!(state.selected_primary_agent_name(), "Alpha");
state.cycle_primary_agent();
assert_eq!(state.selected_primary_agent_name(), "Zeta");
}
#[test]
fn tui_primary_agent_cycle_wraps_to_none() {
let mut state = MissionControlState::default();
state.set_primary_agents(vec![entry("alpha", "Alpha")]);
state.cycle_primary_agent();
state.cycle_primary_agent();
assert_eq!(state.selected_primary_agent_name(), "None");
}
#[test]
fn tui_primary_agent_can_select_by_id() {
let mut state = MissionControlState::default();
state.set_primary_agents(vec![entry("alpha", "Alpha"), entry("zeta", "Zeta")]);
assert!(state.set_selected_primary_agent_id(Some("zeta")));
assert_eq!(state.selected_primary_agent_id(), Some("zeta"));
assert_eq!(state.selected_primary_agent_name(), "Zeta");
assert!(state.set_selected_primary_agent_id(None));
assert_eq!(state.selected_primary_agent_id(), None);
}
#[test]
fn tui_primary_agent_unknown_id_falls_back_to_none() {
let mut state = MissionControlState::default();
state.set_primary_agents(vec![entry("alpha", "Alpha")]);
assert!(!state.set_selected_primary_agent_id(Some("missing")));
assert_eq!(state.selected_primary_agent_id(), None);
assert_eq!(state.selected_primary_agent_name(), "None");
}
#[test]
fn tui_primary_agent_none_is_not_fake_profile() {
let state = MissionControlState::default();
assert_eq!(state.selected_primary_agent_name(), "None");
assert!(state.selected_primary_agent_profile().is_none());
}
#[test]
fn running_prompt_lifecycle_tracks_cancelability_and_clear() {
let mut state = MissionControlState::default();
assert!(!state.running_prompt_cancelable());
state.start_running_prompt("inspect repo".to_string());
assert!(state.running_prompt_cancelable());
assert_eq!(
state.request_running_prompt_cancel().as_deref(),
Some("inspect repo")
);
assert!(!state.running_prompt_cancelable());
assert_eq!(
state.running_prompt.as_ref().map(|prompt| prompt.status),
Some(RunningPromptStatus::Canceling)
);
assert_eq!(
state.mark_running_prompt_canceled().as_deref(),
Some("inspect repo")
);
assert_eq!(
state.running_prompt.as_ref().map(|prompt| prompt.status),
Some(RunningPromptStatus::Canceled)
);
state.clear_running_prompt();
assert!(state.running_prompt.is_none());
}
#[test]
fn reset_for_new_session_clears_running_prompt_state() {
let mut state = MissionControlState::default();
state.start_running_prompt("old prompt".to_string());
state.reset_for_new_session();
assert!(state.running_prompt.is_none());
assert!(!state.running_prompt_cancelable());
}