rab-agent 0.1.0

rab is a lightweight, extensible, Rust-based coding agent.
Documentation
use rab::agent::types::{AgentMessage, Role};

#[test]
fn user_message_has_correct_role() {
    let msg = AgentMessage::user("hello");
    assert_eq!(msg.role, Role::User);
    assert_eq!(msg.content, "hello");
    assert!(msg.tool_calls.is_empty());
    assert!(msg.tool_call_id.is_none());
    assert!(!msg.is_error);
    assert!(!msg.id.is_empty());
}

#[test]
fn tool_result_message_is_error() {
    let msg = AgentMessage::tool_result("call_1", "something went wrong", true);
    assert_eq!(msg.role, Role::ToolResult);
    assert!(msg.is_error);
    assert_eq!(msg.tool_call_id, Some("call_1".into()));
}

#[test]
fn tool_result_message_is_success() {
    let msg = AgentMessage::tool_result("call_2", "all good", false);
    assert!(!msg.is_error);
}

#[test]
fn messages_have_unique_ids() {
    let a = AgentMessage::user("a");
    let b = AgentMessage::user("b");
    assert_ne!(a.id, b.id);
}

#[test]
fn role_serialization() {
    assert_eq!(serde_json::to_string(&Role::User).unwrap(), "\"user\"");
    assert_eq!(
        serde_json::to_string(&Role::Assistant).unwrap(),
        "\"assistant\""
    );
    assert_eq!(
        serde_json::to_string(&Role::ToolResult).unwrap(),
        "\"toolResult\""
    );
}

#[test]
fn message_roundtrip() {
    let msg = AgentMessage::user("test message");
    let json = serde_json::to_string(&msg).unwrap();
    let back: AgentMessage = serde_json::from_str(&json).unwrap();
    assert_eq!(back.content, "test message");
    assert_eq!(back.role, Role::User);
}