opendev-tui 0.1.4

Ratatui-based terminal UI for OpenDev
Documentation
use super::*;

fn sample_servers() -> Vec<McpServerInfo> {
    vec![
        McpServerInfo {
            name: "sqlite".into(),
            command: "uvx mcp-server-sqlite".into(),
            enabled: true,
        },
        McpServerInfo {
            name: "fs".into(),
            command: "uvx mcp-server-filesystem".into(),
            enabled: false,
        },
    ]
}

#[test]
fn test_list_servers() {
    let mut ctrl = McpCommandController::new(sample_servers());
    let result = ctrl.handle_command("list");
    assert!(result.contains("sqlite"));
    assert!(result.contains("enabled"));
    assert!(result.contains("fs"));
    assert!(result.contains("disabled"));
}

#[test]
fn test_list_empty() {
    let mut ctrl = McpCommandController::new(vec![]);
    let result = ctrl.handle_command("list");
    assert!(result.contains("No MCP servers"));
}

#[test]
fn test_add_server() {
    let mut ctrl = McpCommandController::new(vec![]);
    let result = ctrl.handle_command("add myserver uvx my-mcp-server");
    assert!(result.contains("Added"));
    assert_eq!(ctrl.servers().len(), 1);
    assert_eq!(ctrl.servers()[0].name, "myserver");
    assert!(ctrl.servers()[0].enabled);
}

#[test]
fn test_add_duplicate() {
    let mut ctrl = McpCommandController::new(sample_servers());
    let result = ctrl.handle_command("add sqlite uvx something");
    assert!(result.contains("already exists"));
}

#[test]
fn test_remove_server() {
    let mut ctrl = McpCommandController::new(sample_servers());
    let result = ctrl.handle_command("remove sqlite");
    assert!(result.contains("Removed"));
    assert_eq!(ctrl.servers().len(), 1);
}

#[test]
fn test_remove_not_found() {
    let mut ctrl = McpCommandController::new(sample_servers());
    let result = ctrl.handle_command("remove nonexistent");
    assert!(result.contains("not found"));
}

#[test]
fn test_enable_disable() {
    let mut ctrl = McpCommandController::new(sample_servers());
    let result = ctrl.handle_command("enable fs");
    assert!(result.contains("Enabled"));
    assert!(ctrl.servers()[1].enabled);

    let result = ctrl.handle_command("disable fs");
    assert!(result.contains("Disabled"));
    assert!(!ctrl.servers()[1].enabled);
}

#[test]
fn test_unknown_subcommand() {
    let mut ctrl = McpCommandController::new(vec![]);
    let result = ctrl.handle_command("foobar");
    assert!(result.contains("Unknown"));
}

#[test]
fn test_default_lists() {
    let mut ctrl = McpCommandController::new(sample_servers());
    let result = ctrl.handle_command("");
    assert!(result.contains("MCP Servers"));
}