magi-code 0.77.1

Repository-aware CLI coding agent for terminal work
Documentation
use super::*;
use crate::tui::{
    state::{MissionControlState, PrimaryAgentEntry},
    theme::MissionControlTheme,
};
use ratatui::{backend::TestBackend, layout::Rect, 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_places_agent_alone_on_top_right_border() {
    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 layout = layout_for(Rect::new(0, 0, 100, 20), &state);
    let agent = find_text(buffer, "[Shift-Tab] Agent: None").expect("agent title");
    let prompt = find_text(buffer, "Session:    0(in)").expect("session usage footer");

    assert_eq!(agent.1, layout.prompt.y);
    assert!(agent.0 > layout.prompt.x + layout.prompt.width / 2);
    assert_eq!(prompt.1, layout.prompt.y + layout.prompt.height - 1);
    assert!(find_text(buffer, "Prompt [Alt-P]").is_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("[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, "Session:    0(in)").unwrap();
    let agent = find_text(buffer, "[Shift-Tab]").unwrap();

    assert_eq!(
        Some(buffer[prompt].fg),
        MissionControlTheme::default()
            .muted(state.is_prompt_focused())
            .fg
    );
    assert!(!buffer[prompt].modifier.contains(Modifier::BOLD));
    assert_eq!(buffer[agent].fg, MissionControlTheme::default().text_dim());
    assert_eq!(
        buffer[agent].bg,
        MissionControlTheme::default().surface_background()
    );
    assert!(!buffer[agent].modifier.contains(Modifier::BOLD));
}