use super::*;
#[path = "call_refused_e2e.rs"]
mod refused;
fn unserved_call(modern: bool) -> Result<(), Box<dyn Error>> {
let persistence = test_persistence::directory()?;
let server = RunningServer::start(persistence.path())?;
let dir = tempfile::tempdir()?;
let ticket = Ticket::start(dir.path(), server.address, 5_000)?;
let mut host = Host::open(ticket, modern)?;
let input = json!({ "kind": "query", "items": [{ "id": "1", "text": "unserved" }] });
let answer = host.tool("call", &json!({ "subject": SUBJECT, "input": input }))?;
let (stderr, code) = host.ticket.close()?;
assert_eq!(code, 0, "{stderr}");
assert_eq!(answer["isError"], true, "{answer}");
assert_ne!(answer["structuredContent"], input);
assert_eq!(answer["structuredContent"]["subject"], SUBJECT);
let words = answer["structuredContent"]["error"]
.as_str()
.ok_or("no refusal words")?;
assert!(words.contains("no_server"), "{answer}");
assert!(words.contains(SUBJECT), "{answer}");
Ok(())
}
#[test]
fn modern_call_surfaces_no_server_as_an_mcp_error() -> Result<(), Box<dyn Error>> {
unserved_call(true)
}
#[test]
fn legacy_call_surfaces_no_server_as_an_mcp_error() -> Result<(), Box<dyn Error>> {
unserved_call(false)
}