magi-code 0.77.1

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

#[test]
fn submit_unknown_skill_slash_command_reports_error_and_creates_no_worker() {
    let temp = tempfile::TempDir::new().unwrap();
    let (sender, receiver) = bounded::<TuiEvent>(4);
    let mut app = test_app(&temp, sender);
    let mut ui_state = state::MissionControlState::default();

    app.submit(
        "/skill:review".to_string(),
        &mut ui_state,
        &receiver,
        test_area(),
    );

    assert_eq!(ui_state.status, "unknown command: /skill:review");
    assert!(receiver.try_recv().is_err());
    assert!(app.worker.is_none());
    assert!(!app.active_run);
}

#[test]
fn submit_skills_opens_modal_and_toggle_persists_for_fresh_load() {
    let temp = tempfile::TempDir::new().unwrap();
    let (sender, receiver) = bounded::<TuiEvent>(8);
    let mut app = test_app(&temp, sender);
    let skill_path = temp.path().join("skills/review/SKILL.md");
    std::fs::create_dir_all(skill_path.parent().unwrap()).unwrap();
    std::fs::write(&skill_path, "# Review\n").unwrap();
    let skill = crate::skills::load_skill_descriptor(&skill_path).unwrap();
    app.discovered_skills
        .skills
        .insert("review".to_string(), skill.clone());
    app.skills.skills.insert("review".to_string(), skill);
    let mut ui_state = state::MissionControlState::default();

    app.submit("/skills".to_string(), &mut ui_state, &receiver, test_area());
    assert!(ui_state.skills_modal_visible());
    assert!(ui_state.modals.skills_modal.as_ref().unwrap().rows[0].enabled);

    app.set_skill_enabled("review", false, &mut ui_state);
    reap_owned_worker(
        &mut app,
        &mut ui_state,
        MissionControlApp::reap_settings_persistence_worker,
    );
    assert!(!app.skills.skills.contains_key("review"));
    assert_eq!(
        crate::config::disabled_skill_names(&app.config.paths).unwrap(),
        std::collections::BTreeSet::from(["review".to_string()])
    );

    let mut fresh_state = state::MissionControlState::default();
    app.open_skills_modal(&mut fresh_state, test_area());
    assert!(!fresh_state.modals.skills_modal.as_ref().unwrap().rows[0].enabled);
}

#[test]
fn submit_subagents_opens_modal_and_toggle_is_session_scoped() {
    let temp = tempfile::TempDir::new().unwrap();
    let (sender, receiver) = bounded::<TuiEvent>(8);
    let mut app = test_app(&temp, sender);
    app.subagent_profile_discovery.profiles.insert(
        "review".to_string(),
        crate::subagents::profiles::SubagentProfile {
            id: "review".to_string(),
            name: "review".to_string(),
            description: "Code review".to_string(),
            model: None,
            reasoning: None,
            output_schema: None,
            disabled_tools: std::collections::HashSet::new(),
            path: temp.path().join("review.md"),
            prompt: "Review code".to_string(),
        },
    );
    let mut ui_state = state::MissionControlState::default();

    app.submit(
        "/subagents".to_string(),
        &mut ui_state,
        &receiver,
        test_area(),
    );
    assert!(ui_state.subagents_modal_visible());
    assert!(ui_state.modals.subagents_modal.as_ref().unwrap().rows[0].enabled);

    app.set_subagent_profile_enabled("review", false, &mut ui_state);
    reap_owned_worker(
        &mut app,
        &mut ui_state,
        MissionControlApp::reap_settings_persistence_worker,
    );
    assert!(
        app.disabled_subagent_profiles
            .lock()
            .unwrap()
            .contains("review")
    );

    let mut fresh_state = state::MissionControlState::default();
    app.open_subagents_modal(&mut fresh_state, test_area());
    assert!(!fresh_state.modals.subagents_modal.as_ref().unwrap().rows[0].enabled);
}