mirror of
https://github.com/RaisFast/raisfast.git
synced 2026-09-24 08:02:36 +00:00
209 lines
5.9 KiB
Rust
209 lines
5.9 KiB
Rust
use super::*;
|
|
|
|
async fn cron_app() -> (axum::Router, AppState) {
|
|
test_app().await
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn list_returns_empty() {
|
|
let (int_id, doc_id) = create_admin_helper().await;
|
|
let (mut app, _) = cron_app().await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin);
|
|
let (status, body) = send(&mut app, get_auth("/api/v1/admin/crons", &tok)).await;
|
|
assert!(status.is_success());
|
|
assert_eq!(body["code"], 0);
|
|
assert!(body["data"]["items"].as_array().unwrap().is_empty());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn create_and_get() {
|
|
let (int_id, doc_id) = create_admin_helper().await;
|
|
let (mut app, _) = cron_app().await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin);
|
|
|
|
let (status, body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/crons",
|
|
json!({
|
|
"label": "Test Sitemap",
|
|
"job_type": "generate_sitemap",
|
|
"cron_expr": "0 0 */6 * * *",
|
|
"enabled": true
|
|
}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success());
|
|
assert_eq!(body["code"], 0);
|
|
assert_eq!(body["data"]["label"], "Test Sitemap");
|
|
assert_eq!(body["data"]["job_type"], "generate_sitemap");
|
|
assert!(body["data"]["enabled"].as_bool().unwrap());
|
|
|
|
let id = body["data"]["document_id"].as_str().unwrap();
|
|
|
|
let (status, body) = send(
|
|
&mut app,
|
|
get_auth(&format!("/api/v1/admin/crons/{id}"), &tok),
|
|
)
|
|
.await;
|
|
assert!(status.is_success());
|
|
assert_eq!(body["data"]["document_id"], id);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn update_changes_fields() {
|
|
let (int_id, doc_id) = create_admin_helper().await;
|
|
let (mut app, _) = cron_app().await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin);
|
|
|
|
let (_, body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/crons",
|
|
json!({
|
|
"label": "Original",
|
|
"job_type": "my_task",
|
|
"cron_expr": "0 0 * * * *",
|
|
"enabled": true
|
|
}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let id = body["data"]["document_id"].as_str().unwrap();
|
|
|
|
let (status, body) = send(
|
|
&mut app,
|
|
put_json_auth(
|
|
&format!("/api/v1/admin/crons/{id}"),
|
|
json!({"label": "Updated", "enabled": false}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success());
|
|
assert_eq!(body["data"]["label"], "Updated");
|
|
assert!(!body["data"]["enabled"].as_bool().unwrap());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn toggle_enables_and_disables() {
|
|
let (int_id, doc_id) = create_admin_helper().await;
|
|
let (mut app, _) = cron_app().await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin);
|
|
|
|
let (_, body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/crons",
|
|
json!({
|
|
"label": "Toggle Test",
|
|
"job_type": "test_task",
|
|
"cron_expr": "0 0 * * * *",
|
|
"enabled": true
|
|
}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let id = body["data"]["document_id"].as_str().unwrap();
|
|
|
|
let (status, _) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
&format!("/api/v1/admin/crons/{id}/toggle"),
|
|
json!({"enabled": false}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success());
|
|
|
|
let (_, body) = send(
|
|
&mut app,
|
|
get_auth(&format!("/api/v1/admin/crons/{id}"), &tok),
|
|
)
|
|
.await;
|
|
assert!(!body["data"]["enabled"].as_bool().unwrap());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn delete_removes_schedule() {
|
|
let (int_id, doc_id) = create_admin_helper().await;
|
|
let (mut app, _) = cron_app().await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin);
|
|
|
|
let (_, body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/crons",
|
|
json!({
|
|
"label": "To Delete",
|
|
"job_type": "delete_me",
|
|
"cron_expr": "0 0 * * * *",
|
|
"enabled": true
|
|
}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let id = body["data"]["document_id"].as_str().unwrap();
|
|
|
|
let (status, _) = send(
|
|
&mut app,
|
|
Request::builder()
|
|
.method("DELETE")
|
|
.uri(format!("/api/v1/admin/crons/{id}"))
|
|
.header(header::AUTHORIZATION, format!("Bearer {tok}"))
|
|
.body(Body::empty())
|
|
.unwrap(),
|
|
)
|
|
.await;
|
|
assert!(status.is_success());
|
|
|
|
let (_, list_body) = send(&mut app, get_auth("/api/v1/admin/crons", &tok)).await;
|
|
let items = list_body["data"]["items"].as_array().unwrap();
|
|
assert!(items.iter().all(|s| s["document_id"] != id));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn logs_returns_empty_initially() {
|
|
let (int_id, doc_id) = create_admin_helper().await;
|
|
let (mut app, _) = cron_app().await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin);
|
|
|
|
let (status, body) = send(&mut app, get_auth("/api/v1/admin/crons/logs", &tok)).await;
|
|
assert!(status.is_success());
|
|
assert!(body["data"].as_array().unwrap().is_empty());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn validation_rejects_empty_label() {
|
|
let (int_id, doc_id) = create_admin_helper().await;
|
|
let (mut app, _) = cron_app().await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin);
|
|
|
|
let (status, body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/crons",
|
|
json!({
|
|
"label": "",
|
|
"job_type": "test",
|
|
"cron_expr": "0 0 * * * *",
|
|
"enabled": true
|
|
}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(!status.is_success() || body["code"] != 0);
|
|
}
|
|
|
|
async fn create_admin_helper() -> (i64, String) {
|
|
let pool = test_pool().await;
|
|
create_admin(&pool).await
|
|
}
|