61 lines
1.9 KiB
Rust
61 lines
1.9 KiB
Rust
//! Integration tests for kb-mcp
|
|
|
|
use kogral_mcp::{prompts, resources, tools};
|
|
use serde_json::json;
|
|
|
|
#[tokio::test]
|
|
async fn test_list_tools() {
|
|
let tools = tools::list_tools();
|
|
assert!(!tools.is_empty());
|
|
assert!(tools.iter().any(|t| t.name == "kogral/search"));
|
|
assert!(tools.iter().any(|t| t.name == "kogral/add_note"));
|
|
assert!(tools.iter().any(|t| t.name == "kogral/add_decision"));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_list_resources() {
|
|
let resources = resources::list_resources().await.unwrap();
|
|
assert!(!resources.is_empty());
|
|
assert!(resources.iter().any(|r| r.uri == "kogral://project/notes"));
|
|
assert!(resources
|
|
.iter()
|
|
.any(|r| r.uri == "kogral://shared/guidelines"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_list_prompts() {
|
|
let prompts = prompts::list_prompts();
|
|
assert!(!prompts.is_empty());
|
|
assert!(prompts.iter().any(|p| p.name == "kogral/summarize_project"));
|
|
assert!(prompts.iter().any(|p| p.name == "kogral/find_related"));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_execute_search_tool() {
|
|
let args = json!({
|
|
"query": "test",
|
|
"limit": 5
|
|
});
|
|
|
|
// This test expects the tool to execute even if no graph exists
|
|
// The tool should return an empty result or error gracefully
|
|
let result = tools::execute_tool("kogral/search", args).await;
|
|
|
|
// Tool execution should succeed (even with no results)
|
|
// The actual search may fail if graph doesn't exist, but tool dispatch should
|
|
// work
|
|
match result {
|
|
Ok(_) => assert!(true),
|
|
Err(e) => {
|
|
// If it errors, it should be due to missing graph, not a tool execution error
|
|
assert!(e.to_string().contains("not found") || e.to_string().contains("Graph"));
|
|
}
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_execute_list_graphs_tool() {
|
|
let result = tools::execute_tool("kogral/list_graphs", json!({})).await;
|
|
assert!(result.is_ok());
|
|
}
|