magi-code 0.64.1

Repository-aware CLI coding agent for terminal work
Documentation
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());
}