Files
freedak f7a720204a Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
2026-07-04 19:20:46 +08:00

76 lines
2.3 KiB
Rust

//! Provider health-check route auth and validation tests.
mod common;
use axum::body::Body;
use axum::http::{Request, StatusCode};
use serde_json::json;
use tower::ServiceExt;
use common::{body_json, build_app, json_with_token, setup_and_login};
#[tokio::test]
async fn provider_health_check_unauthenticated_is_rejected() {
let (app, _services) = build_app().await;
let req = Request::builder()
.method("POST")
.uri("/api/agents/provider-health-check")
.header("content-type", "application/json")
.body(Body::from(
serde_json::to_vec(&json!({"provider_id": "p1", "model": "gpt-4o"})).unwrap(),
))
.unwrap();
let resp = app.oneshot(req).await.unwrap();
assert!(
resp.status() == StatusCode::UNAUTHORIZED || resp.status() == StatusCode::FORBIDDEN,
"expected auth rejection, got {}",
resp.status()
);
}
#[tokio::test]
async fn provider_health_check_requires_csrf_for_post() {
let (mut app, services) = build_app().await;
let (token, _csrf) = setup_and_login(&mut app, &services, "admin", "StrongP@ss1").await;
let req = Request::builder()
.method("POST")
.uri("/api/agents/provider-health-check")
.header("content-type", "application/json")
.header("authorization", format!("Bearer {token}"))
.body(Body::from(
serde_json::to_vec(&json!({"provider_id": "p1", "model": "gpt-4o"})).unwrap(),
))
.unwrap();
let resp = app.oneshot(req).await.unwrap();
assert_eq!(resp.status(), StatusCode::FORBIDDEN);
}
#[tokio::test]
async fn provider_health_check_validates_required_fields() {
let (mut app, services) = build_app().await;
let (token, csrf) = setup_and_login(&mut app, &services, "admin", "StrongP@ss1").await;
let req = json_with_token(
"POST",
"/api/agents/provider-health-check",
json!({"provider_id": "", "model": "gpt-4o"}),
&token,
&csrf,
);
let resp = app.oneshot(req).await.unwrap();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
let json = body_json(resp).await;
assert_eq!(json["code"], "BAD_REQUEST");
assert!(
json["error"]
.as_str()
.is_some_and(|message| message.contains("provider_id is required")),
"expected provider_id validation error, got {json}"
);
}