use sekuire_sdk::{create_default_tool_registry, CalculatorTool, Tool};
use serde_json::Value;
use std::collections::HashMap;
#[tokio::test]
async fn test_calculator_tool() {
let calc = CalculatorTool::new();
let mut input = HashMap::new();
input.insert("expression".to_string(), Value::String("2 + 2".to_string()));
let result = calc.execute(input).await.unwrap();
assert!(result.contains("4"));
}
#[tokio::test]
async fn test_calculator_complex_expression() {
let calc = CalculatorTool::new();
let mut input = HashMap::new();
input.insert(
"expression".to_string(),
Value::String("2 + 3 * 4".to_string()),
);
let result = calc.execute(input).await.unwrap();
assert!(result.contains("14"));
}
#[tokio::test]
async fn test_tool_registry() {
let registry = create_default_tool_registry();
let tools = registry.list();
assert!(tools.len() >= 4);
assert!(registry.get("calculator").is_some());
assert!(registry.get("web_search").is_some());
assert!(registry.get("http_request").is_some());
assert!(registry.get("file_read").is_some());
}
#[tokio::test]
async fn test_tool_metadata() {
let calc = CalculatorTool::new();
let metadata = calc.metadata();
assert_eq!(metadata.name, "calculator");
assert!(!metadata.description.is_empty());
assert_eq!(metadata.parameters.len(), 1);
let param = &metadata.parameters[0];
assert_eq!(param.name, "expression");
assert_eq!(param.param_type, "string");
assert!(param.required);
}
#[tokio::test]
async fn test_tool_json_schema() {
let calc = CalculatorTool::new();
let schema = calc.to_schema();
assert_eq!(schema["name"], "calculator");
assert!(schema["description"].is_string());
assert!(schema["parameters"]["type"] == "object");
assert!(schema["parameters"]["properties"]["expression"].is_object());
assert!(schema["parameters"]["required"].is_array());
}