sekuire 0.1.0

The official SDK for the Sekuire Agent Identity Protocol
Documentation
//! Integration tests for Sekuire SDK

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());
}