mod common;
use common::{TestServer, app_state, get_json, memory_store, register_agent, sample_toml};
use reqwest::StatusCode;
use salvor_llm::Config;
use salvor_runtime::Agent;
use salvor_server::{AgentFactory, BuiltAgent};
use std::sync::Arc;
fn named_agent_factory(name: &'static str) -> AgentFactory {
Arc::new(move |_definition| {
Box::pin(async move {
let agent = Agent::builder()
.model(Config::new(), "test-model")
.name(name)
.build()
.map_err(|error| error.to_string())?;
Ok(BuiltAgent {
agent,
servers: vec![],
})
})
})
}
fn unnamed_agent_factory() -> AgentFactory {
Arc::new(move |_definition| {
Box::pin(async move {
let agent = Agent::builder()
.model(Config::new(), "test-model")
.build()
.map_err(|error| error.to_string())?;
Ok(BuiltAgent {
agent,
servers: vec![],
})
})
})
}
#[tokio::test]
async fn get_and_list_return_the_name_when_the_build_carries_one() {
let server = TestServer::spawn(app_state(
memory_store(),
named_agent_factory("support-triage"),
))
.await;
let client = reqwest::Client::new();
let hash = register_agent(&client, &server.base, sample_toml(), None).await;
let (status, body) =
get_json(&client, &format!("{}/v1/agents/{hash}", server.base), None).await;
assert_eq!(status, StatusCode::OK);
assert_eq!(body["agent"], hash);
assert_eq!(body["name"], "support-triage");
let (status, body) = get_json(&client, &format!("{}/v1/agents", server.base), None).await;
assert_eq!(status, StatusCode::OK);
let agents = body["agents"].as_array().expect("agents array");
let entry = agents
.iter()
.find(|entry| entry["agent"] == hash)
.expect("the registered agent is listed");
assert_eq!(entry["name"], "support-triage");
}
#[tokio::test]
async fn get_and_list_omit_name_when_the_build_carries_none() {
let server = TestServer::spawn(app_state(memory_store(), unnamed_agent_factory())).await;
let client = reqwest::Client::new();
let hash = register_agent(&client, &server.base, sample_toml(), None).await;
let (status, body) =
get_json(&client, &format!("{}/v1/agents/{hash}", server.base), None).await;
assert_eq!(status, StatusCode::OK);
assert_eq!(body["agent"], hash);
assert!(
body.as_object().expect("object").get("name").is_none(),
"no name key at all, not null: {body}"
);
let (status, body) = get_json(&client, &format!("{}/v1/agents", server.base), None).await;
assert_eq!(status, StatusCode::OK);
let agents = body["agents"].as_array().expect("agents array");
let entry = agents
.iter()
.find(|entry| entry["agent"] == hash)
.expect("the registered agent is listed");
assert!(
entry.as_object().expect("object").get("name").is_none(),
"no name key at all, not null: {entry}"
);
}