vtcode-core 0.136.1

Core library for VT Code - a Rust-based terminal coding agent
#![allow(missing_docs, clippy::expect_used)]
use assert_fs::TempDir;
use std::fs;
use vtcode_core::mcp::cli::{
    LoginArgs, LogoutArgs, McpCommands, handle_mcp_command, set_global_config_path_override_for_tests,
};

struct ConfigOverrideGuard;

impl ConfigOverrideGuard {
    fn set(path: std::path::PathBuf) -> Self {
        set_global_config_path_override_for_tests(Some(path)).expect("set config override");
        Self
    }
}

impl Drop for ConfigOverrideGuard {
    fn drop(&mut self) {
        set_global_config_path_override_for_tests(None).expect("clear config override");
    }
}

#[tokio::test]
async fn mcp_login_reports_missing_provider() {
    let temp_dir = TempDir::new().expect("temp dir");
    let config_path = temp_dir.path().join("vtcode.toml");
    fs::write(&config_path, "").expect("write config");
    let _guard = ConfigOverrideGuard::set(config_path);

    let err = handle_mcp_command(McpCommands::Login(LoginArgs { name: "mock".to_string() }))
        .await
        .expect_err("login should require a configured provider");

    assert!(err.to_string().contains("No MCP provider named 'mock' found."));
}

#[tokio::test]
async fn mcp_logout_reports_missing_provider() {
    let temp_dir = TempDir::new().expect("temp dir");
    let config_path = temp_dir.path().join("vtcode.toml");
    fs::write(&config_path, "").expect("write config");
    let _guard = ConfigOverrideGuard::set(config_path);

    let err = handle_mcp_command(McpCommands::Logout(LogoutArgs { name: "mock".to_string() }))
        .await
        .expect_err("logout should require a configured provider");

    assert!(err.to_string().contains("No MCP provider named 'mock' found."));
}