Second tool — `doctor` (no input args, returns doctor.v1 JSON via kebab_app::doctor_with_config_path). Mirrors schema tool's manual-dispatch pattern: Tool::new entry in list_tools, match arm in call_tool, per-tool module in tools/doctor.rs. doctor_with_config_path takes Option<&Path> (not &Config), so KebabAppState is extended with config_path: Option<PathBuf>. All existing callers (initialize.rs, tools_call_schema.rs, serve_stdio_async) pass None for now; Plan Task 10 (Cmd::Mcp wiring) will thread the actual --config path through. doctor_with_config falls back to XDG default when config_path is None — same behavior as bare `kebab doctor`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
20 lines
653 B
Rust
20 lines
653 B
Rust
//! Integration: KebabHandler::get_info returns correct kebab serverInfo.
|
|
//! Doesn't exercise full transport — that lands when we have at least
|
|
//! one tool to call (Task 4+).
|
|
|
|
use kebab_config::Config;
|
|
use kebab_mcp::{KebabAppState, KebabHandler};
|
|
use rmcp::ServerHandler;
|
|
|
|
#[tokio::test]
|
|
async fn initialize_returns_kebab_server_info() {
|
|
let cfg = Config::defaults();
|
|
let state = KebabAppState::new(cfg, None);
|
|
let handler = KebabHandler::new(state);
|
|
|
|
let info = handler.get_info();
|
|
assert_eq!(info.server_info.name, "kebab");
|
|
assert!(!info.server_info.version.is_empty());
|
|
assert!(info.capabilities.tools.is_some());
|
|
}
|