WP-12: contract and failing tests for the Kubernetes overview
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / ui (push) Has been cancelled

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Dennis Nemec
2026-09-02 22:29:36 +02:00
parent 684695e71a
commit 51ec216910
14 changed files with 922 additions and 0 deletions

View File

@ -0,0 +1,105 @@
//! WP-12: /api/cluster
mod common;
use axum::http::StatusCode;
use common::{get, post, test_app_with_admin};
use serde_json::json;
const ADMIN: &str = "admin@example.com";
const PW: &str = "admin-password-123";
#[tokio::test]
async fn overview_and_admin_actions() {
let app = test_app_with_admin().await;
let token = common::login(&app, ADMIN, PW).await.access;
let res = get(&app, "/api/cluster/overview", Some(&token)).await;
assert_eq!(res.status, StatusCode::OK, "{}", res.json);
assert_eq!(res.json["nodes"][0]["version"], "v1.32.13");
let w = res.json["workloads"].as_array().unwrap();
assert!(w
.iter()
.any(|w| w["name"] == "gitea" && w["kind"] == "deployment"));
assert!(res.json["images"].as_array().unwrap().len() >= 2);
let base = "/api/cluster/workloads/gitea/deployment/gitea";
assert_eq!(
post(&app, &format!("{base}/restart"), json!({}), Some(&token))
.await
.status,
StatusCode::NO_CONTENT
);
assert_eq!(
post(
&app,
&format!("{base}/scale"),
json!({"replicas": 2}),
Some(&token)
)
.await
.status,
StatusCode::NO_CONTENT
);
assert_eq!(
post(
&app,
&format!("{base}/scale"),
json!({"replicas": 500}),
Some(&token)
)
.await
.status,
StatusCode::UNPROCESSABLE_ENTITY
);
assert_eq!(
post(
&app,
&format!("{base}/image"),
json!({"image": "gitea/gitea:1.23.0"}),
Some(&token)
)
.await
.status,
StatusCode::NO_CONTENT
);
assert_eq!(
post(
&app,
"/api/cluster/workloads/gitea/cronjob/x/restart",
json!({}),
Some(&token)
)
.await
.status,
StatusCode::NOT_FOUND
);
}
#[tokio::test]
async fn actions_are_admin_only_and_overview_needs_auth() {
let app = test_app_with_admin().await;
let admin = common::login(&app, ADMIN, PW).await.access;
post(&app, "/api/users", json!({"email": "u@x.de", "display_name": "U", "password": "user-password-123", "role": "user"}), Some(&admin)).await;
let user = common::login(&app, "u@x.de", "user-password-123")
.await
.access;
assert_eq!(
get(&app, "/api/cluster/overview", Some(&user)).await.status,
StatusCode::OK
);
assert_eq!(
post(
&app,
"/api/cluster/workloads/gitea/deployment/gitea/restart",
json!({}),
Some(&user)
)
.await
.status,
StatusCode::FORBIDDEN
);
assert_eq!(
get(&app, "/api/cluster/overview", None).await.status,
StatusCode::UNAUTHORIZED
);
}