use rucora_core::tool::Tool;
use serde_json::json;
#[tokio::test]
async fn http_request_tool_should_fetch_rustcc_article() {
let tool = rucora::tools::HttpRequestTool::new();
let out = tool
.call(json!({
"method": "GET",
"url": "https://rustcc.cn/article?id=a122f1ed-44bd-4e72-9dd5-ca901331370b",
"headers": {
"Accept": "text/html",
"User-Agent": "rucora-http-tool-smoke-test"
},
"timeout": 30
}))
.await
.expect("http_request tool call failed");
let status = out
.get("status")
.and_then(|v| v.as_u64())
.expect("missing status") as u16;
let success = out
.get("success")
.and_then(|v| v.as_bool())
.expect("missing success");
let body = out
.get("body")
.and_then(|v| v.as_str())
.expect("missing body");
assert!((200..400).contains(&status), "unexpected status: {status}");
assert!(success || (300..400).contains(&status));
assert!(!body.is_empty(), "body should not be empty");
assert!(
body.contains("rustcc") || body.contains("Rust") || body.contains("<html"),
"body does not look like html"
);
}