magi-code 0.64.0

Repository-aware CLI coding agent for terminal work
Documentation
use super::*;
use crate::tui::state::{MissionControlState, PrimaryAgentEntry};
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};

fn key(code: KeyCode, modifiers: KeyModifiers) -> KeyEvent {
    KeyEvent::new(code, modifiers)
}

fn entry(id: &str, name: &str) -> PrimaryAgentEntry {
    PrimaryAgentEntry {
        id: id.to_string(),
        name: name.to_string(),
        description: String::new(),
        prompt: format!("{name} body"),
    }
}

#[test]
fn tui_shift_tab_cycles_primary_agent() {
    let mut state = MissionControlState::default();
    state.set_primary_agents(vec![entry("alpha", "Alpha"), entry("zeta", "Zeta")]);
    assert_eq!(state.selected_primary_agent_name(), "None");
    assert_eq!(
        handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
        InputAction::PrimaryAgentSelectionChanged(Some("alpha".to_string()))
    );
    assert_eq!(state.selected_primary_agent_name(), "Alpha");
    assert_eq!(
        handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
        InputAction::PrimaryAgentSelectionChanged(Some("zeta".to_string()))
    );
    assert_eq!(state.selected_primary_agent_name(), "Zeta");
    assert_eq!(
        handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
        InputAction::PrimaryAgentSelectionChanged(None)
    );
    assert_eq!(state.selected_primary_agent_name(), "None");
}

#[test]
fn tui_shift_tab_does_not_update_status_recent_action() {
    let mut state = MissionControlState {
        status: "run complete".to_string(),
        ..Default::default()
    };
    state.set_primary_agents(vec![entry("alpha", "Alpha")]);

    assert_eq!(
        handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
        InputAction::PrimaryAgentSelectionChanged(Some("alpha".to_string()))
    );

    assert_eq!(state.selected_primary_agent_name(), "Alpha");
    assert_eq!(state.status, "run complete");
}

#[test]
fn tui_tab_does_not_toggle_focus() {
    let mut state = MissionControlState {
        focus_pane: crate::tui::state::TuiFocusPane::Prompt,
        ..Default::default()
    };
    handle_key(key(KeyCode::Tab, KeyModifiers::NONE), &mut state);
    assert!(state.is_prompt_focused());
}

#[test]
fn tui_shift_tab_does_not_cycle_primary_agent_while_modal_owns_input() {
    let mut state = MissionControlState::default();
    state.set_primary_agents(vec![entry("alpha", "Alpha")]);
    state.open_system_prompt_modal("modal".to_string());
    handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state);
    assert_eq!(state.selected_primary_agent_name(), "None");
}

#[test]
fn tui_keybinding_help_mentions_primary_agent_cycle() {
    let help = help_text();
    assert!(
        help.contains("[Shift-Tab] cycles primary agent selection"),
        "{help}"
    );
}