objectiveai-api 2.0.5

ObjectiveAI API Server
use super::super::{ContinuationItem, UpstreamClient};
use super::State;

fn make_client() -> super::Client {
    super::Client::new(String::new(), true, 0, 180, 1)
}

#[test]
fn test_no_continuation_no_request_continuation() {
    let client = make_client();
    let result = client.response_continuation(
        indexmap::IndexMap::new(),
        None,
        &[],
        None,
    );
    assert_eq!(result, objectiveai_sdk::agent::claude_agent_sdk::Continuation {
        upstream: objectiveai_sdk::agent::claude_agent_sdk::Upstream::ClaudeAgentSdk,
        session_id: String::new(),
        mcp_sessions: indexmap::IndexMap::new(),
    });
}

#[test]
fn test_session_id_from_continuation_state() {
    let client = make_client();
    let continuation = vec![
        ContinuationItem::State(State {
            session_id: "internal-sess".into(),
            message_count: 1,
        }),
    ];
    let result = client.response_continuation(
        indexmap::IndexMap::new(),
        None,
        &[],
        Some(&continuation),
    );
    assert_eq!(result.session_id, "internal-sess");
}

#[test]
fn test_session_id_falls_back_to_request_continuation() {
    let client = make_client();
    let rc = objectiveai_sdk::agent::claude_agent_sdk::Continuation {
        upstream: objectiveai_sdk::agent::claude_agent_sdk::Upstream::ClaudeAgentSdk,
        session_id: "req-sess-123".into(),
        mcp_sessions: indexmap::IndexMap::new(),
    };
    let result = client.response_continuation(
        indexmap::IndexMap::new(),
        Some(&rc),
        &[],
        None,
    );
    assert_eq!(result.session_id, "req-sess-123");
}

#[test]
fn test_internal_session_id_takes_precedence() {
    let client = make_client();
    let continuation = vec![
        ContinuationItem::State(State {
            session_id: "internal-sess".into(),
            message_count: 1,
        }),
    ];
    let rc = objectiveai_sdk::agent::claude_agent_sdk::Continuation {
        upstream: objectiveai_sdk::agent::claude_agent_sdk::Upstream::ClaudeAgentSdk,
        session_id: "req-sess-456".into(),
        mcp_sessions: indexmap::IndexMap::new(),
    };
    let result = client.response_continuation(
        indexmap::IndexMap::new(),
        Some(&rc),
        &[],
        Some(&continuation),
    );
    assert_eq!(result.session_id, "internal-sess");
}

#[test]
fn test_empty_internal_session_falls_back_to_request() {
    let client = make_client();
    let continuation = vec![
        ContinuationItem::State(State {
            session_id: String::new(),
            message_count: 0,
        }),
    ];
    let rc = objectiveai_sdk::agent::claude_agent_sdk::Continuation {
        upstream: objectiveai_sdk::agent::claude_agent_sdk::Upstream::ClaudeAgentSdk,
        session_id: "req-sess-fallback".into(),
        mcp_sessions: indexmap::IndexMap::new(),
    };
    let result = client.response_continuation(
        indexmap::IndexMap::new(),
        Some(&rc),
        &[],
        Some(&continuation),
    );
    assert_eq!(result.session_id, "req-sess-fallback");
}

#[test]
fn test_mcp_sessions_preserved() {
    let client = make_client();
    let mut mcp_sessions = indexmap::IndexMap::new();
    mcp_sessions.insert("http://mcp.example.com".into(), "sess-abc".into());
    let result = client.response_continuation(
        mcp_sessions.clone(),
        None,
        &[],
        None,
    );
    assert_eq!(result.mcp_sessions, mcp_sessions);
}