magi-code 0.64.1

Repository-aware CLI coding agent for terminal work
Documentation
use super::*;

#[test]
fn tools_modal_open_toggle_clamp_and_close() {
    let mut state = MissionControlState::default();
    state.open_tools_modal(
        vec![
            ToolToggleRow {
                name: "bash".to_string(),
                kind: "built-in".to_string(),
                enabled: true,
            },
            ToolToggleRow {
                name: "mcp__mock__echo".to_string(),
                kind: "mcp:mock".to_string(),
                enabled: false,
            },
        ],
        1,
    );

    assert!(state.tools_modal_visible());
    assert!(state.tools_modal_down(1));
    assert_eq!(
        state.toggle_selected_tool(),
        Some(("mcp__mock__echo".to_string(), true))
    );
    state.set_tool_row_enabled("mcp__mock__echo", false);
    assert!(!state.modals.tools_modal.as_ref().unwrap().rows[1].enabled);
    assert!(state.close_tools_modal());

    state.open_tools_modal(Vec::new(), 1);
    assert_eq!(state.toggle_selected_tool(), None);
    assert_eq!(state.modals.tools_modal.as_ref().unwrap().selected, 0);
}

#[test]
fn system_prompt_modal_open_scroll_and_close_preserves_unrelated_state() {
    let mut state = MissionControlState {
        input: "draft".to_string(),
        prompt_cursor: 5,
        transcript: vec!["transcript".to_string()].into(),
        provider: "provider".to_string(),
        model: "model".to_string(),
        provider_ready: true,
        footer_session: "sess".to_string(),
        footer_session_id: Some("sess".to_string()),
        footer_cwd: "/tmp".to_string(),
        ..Default::default()
    };
    state.set_scroll_offset(&state.scroll_views.prompt, 2);
    state.set_scroll_offset(&state.scroll_views.transcript, 3);
    state.set_scroll_offset(&state.scroll_views.activity_tree, 4);
    state.set_scroll_offset(&state.scroll_views.detail, 5);

    state.open_system_prompt_modal("one two three four five six".to_string());
    assert_eq!(state.scroll_offset(&state.scroll_views.system_prompt), 0);
    state.scroll_system_prompt_down_by(10, 1, 5);
    assert!(state.scroll_offset(&state.scroll_views.system_prompt) > 0);
    state.scroll_system_prompt_up_by(u16::MAX, 1, 5);
    assert_eq!(state.scroll_offset(&state.scroll_views.system_prompt), 0);
    assert!(state.close_system_prompt_modal());

    assert_eq!(state.input, "draft");
    assert_eq!(state.prompt_cursor, 5);
    assert_eq!(state.prompt_offset(), 2);
    assert_eq!(state.transcript, vec!["transcript"]);
    assert_eq!(state.transcript_scroll_offset(), 3);
    assert_eq!(state.activity_scroll_offset(), 4);
    assert_eq!(state.detail_offset(), 5);
    assert_eq!(state.provider, "provider");
    assert_eq!(state.model, "model");
    assert!(state.provider_ready);
    assert_eq!(state.footer_session, "sess");
    assert_eq!(state.footer_cwd, "/tmp");
}