magi-code 0.63.4

Repository-aware CLI coding agent for terminal work
Documentation
use super::*;
use crate::tui::{
    state::{MissionControlState, PrimaryAgentEntry},
    theme::MATRIX_GREEN,
};
use ratatui::{backend::TestBackend, style::Modifier};

use super::test_support::find_text;

fn rendered(state: &MissionControlState) -> String {
    let backend = TestBackend::new(100, 20);
    let mut terminal = ratatui::Terminal::new(backend).unwrap();
    terminal.draw(|frame| draw(frame, state)).unwrap();
    terminal
        .backend()
        .buffer()
        .content()
        .iter()
        .map(|cell| cell.symbol())
        .collect::<String>()
}

#[test]
fn render_prompt_shows_agent_none_by_default() {
    let state = MissionControlState {
        focus_pane: crate::tui::state::TuiFocusPane::Prompt,
        ..Default::default()
    };
    assert!(rendered(&state).contains("Prompt [Alt-P] • [Shift-Tab] Agent: None"));
}

#[test]
fn render_prompt_shows_selected_primary_agent_name() {
    let mut state = MissionControlState {
        focus_pane: crate::tui::state::TuiFocusPane::Prompt,
        ..Default::default()
    };
    state.set_primary_agents(vec![PrimaryAgentEntry {
        id: "tars".to_string(),
        name: "TARS".to_string(),
        description: String::new(),
        prompt: String::new(),
    }]);
    state.cycle_primary_agent();
    assert!(rendered(&state).contains("Prompt [Alt-P] • [Shift-Tab] Agent: TARS"));
}

#[test]
fn render_prompt_agent_label_uses_muted_non_bold_style() {
    let state = MissionControlState {
        focus_pane: crate::tui::state::TuiFocusPane::Prompt,
        ..Default::default()
    };
    let backend = TestBackend::new(100, 20);
    let mut terminal = ratatui::Terminal::new(backend).unwrap();
    terminal.draw(|frame| draw(frame, &state)).unwrap();
    let buffer = terminal.backend().buffer();
    let prompt = find_text(buffer, "Prompt").unwrap();
    let agent = find_text(buffer, "[Shift-Tab]").unwrap();

    assert_eq!(buffer[prompt].fg, MATRIX_GREEN.green_bright);
    assert!(buffer[prompt].modifier.contains(Modifier::BOLD));
    assert_eq!(buffer[agent].fg, MATRIX_GREEN.green_dim);
    assert_eq!(buffer[agent].bg, MATRIX_GREEN.background);
    assert!(!buffer[agent].modifier.contains(Modifier::BOLD));
}