f7a720204a
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
143 lines
4.7 KiB
Rust
143 lines
4.7 KiB
Rust
//! Settings and client preferences CRUD tests with auth.
|
|
|
|
mod common;
|
|
|
|
use axum::http::StatusCode;
|
|
use serde_json::json;
|
|
use tower::ServiceExt;
|
|
|
|
use common::{body_json, build_app, get_with_token, json_with_token, setup_and_login};
|
|
|
|
// ===========================================================================
|
|
// Settings CRUD
|
|
// ===========================================================================
|
|
|
|
#[tokio::test]
|
|
async fn settings_get_default_values_with_auth() {
|
|
let (mut app, services) = build_app().await;
|
|
let (token, _csrf) = setup_and_login(&mut app, &services, "admin", "StrongP@ss1").await;
|
|
|
|
let resp = app.oneshot(get_with_token("/api/settings", &token)).await.unwrap();
|
|
assert_eq!(resp.status(), StatusCode::OK);
|
|
let json = body_json(resp).await;
|
|
assert_eq!(json["success"], true);
|
|
assert_eq!(json["data"]["language"], "en-US");
|
|
assert_eq!(json["data"]["notification_enabled"], true);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn settings_patch_and_get_with_auth() {
|
|
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(
|
|
"PATCH",
|
|
"/api/settings",
|
|
json!({"language": "zh-CN", "notification_enabled": false}),
|
|
&token,
|
|
&csrf,
|
|
);
|
|
let resp = app.clone().oneshot(req).await.unwrap();
|
|
assert_eq!(resp.status(), StatusCode::OK);
|
|
let json = body_json(resp).await;
|
|
assert_eq!(json["data"]["language"], "zh-CN");
|
|
assert_eq!(json["data"]["notification_enabled"], false);
|
|
|
|
let resp = app.oneshot(get_with_token("/api/settings", &token)).await.unwrap();
|
|
let json = body_json(resp).await;
|
|
assert_eq!(json["data"]["language"], "zh-CN");
|
|
assert_eq!(json["data"]["notification_enabled"], false);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn settings_invalid_language_rejected_with_auth() {
|
|
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(
|
|
"PATCH",
|
|
"/api/settings",
|
|
json!({"language": "invalid-lang"}),
|
|
&token,
|
|
&csrf,
|
|
);
|
|
let resp = app.oneshot(req).await.unwrap();
|
|
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
|
|
}
|
|
|
|
// ===========================================================================
|
|
// Client Preferences CRUD
|
|
// ===========================================================================
|
|
|
|
#[tokio::test]
|
|
async fn client_prefs_empty_then_write_with_auth() {
|
|
let (mut app, services) = build_app().await;
|
|
let (token, csrf) = setup_and_login(&mut app, &services, "admin", "StrongP@ss1").await;
|
|
|
|
let resp = app
|
|
.clone()
|
|
.oneshot(get_with_token("/api/settings/client", &token))
|
|
.await
|
|
.unwrap();
|
|
assert_eq!(resp.status(), StatusCode::OK);
|
|
let json = body_json(resp).await;
|
|
assert_eq!(json["data"], json!({}));
|
|
|
|
let req = json_with_token(
|
|
"PUT",
|
|
"/api/settings/client",
|
|
json!({"theme": "dark", "companion.size": 360, "system.closeToTray": true}),
|
|
&token,
|
|
&csrf,
|
|
);
|
|
let resp = app.clone().oneshot(req).await.unwrap();
|
|
assert_eq!(resp.status(), StatusCode::OK);
|
|
|
|
let resp = app
|
|
.clone()
|
|
.oneshot(get_with_token("/api/settings/client", &token))
|
|
.await
|
|
.unwrap();
|
|
let json = body_json(resp).await;
|
|
assert_eq!(json["data"]["theme"], "dark");
|
|
assert_eq!(json["data"]["companion.size"], 360);
|
|
assert_eq!(json["data"]["system.closeToTray"], true);
|
|
|
|
let req = json_with_token("PUT", "/api/settings/client", json!({"theme": null}), &token, &csrf);
|
|
let resp = app.clone().oneshot(req).await.unwrap();
|
|
assert_eq!(resp.status(), StatusCode::OK);
|
|
|
|
let resp = app
|
|
.oneshot(get_with_token("/api/settings/client", &token))
|
|
.await
|
|
.unwrap();
|
|
let json = body_json(resp).await;
|
|
assert!(json["data"].get("theme").is_none());
|
|
assert_eq!(json["data"]["companion.size"], 360);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn client_prefs_key_filter_with_auth() {
|
|
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(
|
|
"PUT",
|
|
"/api/settings/client",
|
|
json!({"a": 1, "b": 2, "c": 3}),
|
|
&token,
|
|
&csrf,
|
|
);
|
|
app.clone().oneshot(req).await.unwrap();
|
|
|
|
let resp = app
|
|
.oneshot(get_with_token("/api/settings/client?keys=a,c", &token))
|
|
.await
|
|
.unwrap();
|
|
let json = body_json(resp).await;
|
|
let data = json["data"].as_object().unwrap();
|
|
assert_eq!(data.len(), 2);
|
|
assert_eq!(data["a"], 1);
|
|
assert_eq!(data["c"], 3);
|
|
}
|