mirror of
https://github.com/RaisFast/raisfast.git
synced 2026-09-24 00:02:28 +00:00
166 lines
4.8 KiB
Rust
166 lines
4.8 KiB
Rust
use super::*;
|
|
|
|
async fn admin_setup() -> (axum::Router, AppState, String) {
|
|
let (app, state) = test_app().await;
|
|
let (int_id, doc_id) = create_author(&state.pool).await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Author);
|
|
(app, state, tok)
|
|
}
|
|
|
|
fn block_content() -> serde_json::Value {
|
|
json!([{"type": "richtext", "content": "Hello world"}])
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn create_reusable_block_success() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let (status, body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/reusable-blocks",
|
|
json!({
|
|
"name": "Hero Banner",
|
|
"block_type": "hero",
|
|
"content": block_content().to_string()
|
|
}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "create block: {status} {body:?}");
|
|
assert_eq!(body["data"]["name"], "Hero Banner");
|
|
assert!(body["data"]["document_id"].is_string());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn create_block_validation_empty_name() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let (status, _) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/reusable-blocks",
|
|
json!({"name": "", "block_type": "hero", "content": "[]"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(!status.is_success());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn list_reusable_blocks() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let _: (StatusCode, Value) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/reusable-blocks",
|
|
json!({"name": "Block1", "block_type": "text", "content": "[]"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let (status, body) = send(&mut app, get_auth("/api/v1/admin/reusable-blocks", &tok)).await;
|
|
assert!(status.is_success(), "list blocks: {status} {body:?}");
|
|
let items = body["data"].as_array().unwrap();
|
|
assert!(!items.is_empty());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn get_reusable_block_by_id() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let (_, create_body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/reusable-blocks",
|
|
json!({"name": "CTA", "block_type": "cta", "content": "[]"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let id = create_body["data"]["document_id"].as_str().unwrap();
|
|
let (status, body) = send(
|
|
&mut app,
|
|
get_auth(&format!("/api/v1/admin/reusable-blocks/{id}"), &tok),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "get block: {status} {body:?}");
|
|
assert_eq!(body["data"]["name"], "CTA");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn get_reusable_block_not_found() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let fake = uuid::Uuid::now_v7().to_string();
|
|
let (status, _) = send(
|
|
&mut app,
|
|
get_auth(&format!("/api/v1/admin/reusable-blocks/{fake}"), &tok),
|
|
)
|
|
.await;
|
|
assert_eq!(status, StatusCode::NOT_FOUND);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn update_reusable_block() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let (_, create_body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/reusable-blocks",
|
|
json!({"name": "Old", "block_type": "text", "content": "[]"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let id = create_body["data"]["document_id"].as_str().unwrap();
|
|
let (status, body) = send(
|
|
&mut app,
|
|
put_json_auth(
|
|
&format!("/api/v1/admin/reusable-blocks/{id}"),
|
|
json!({"name": "New", "description": "updated"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "update block: {status} {body:?}");
|
|
assert_eq!(body["data"]["name"], "New");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn delete_reusable_block() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let (_, create_body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/reusable-blocks",
|
|
json!({"name": "Delete", "block_type": "text", "content": "[]"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let id = create_body["data"]["document_id"].as_str().unwrap();
|
|
let (status, _) = send(
|
|
&mut app,
|
|
delete_auth(&format!("/api/v1/admin/reusable-blocks/{id}"), &tok),
|
|
)
|
|
.await;
|
|
assert!(status.is_success());
|
|
let (s, _) = send(
|
|
&mut app,
|
|
get_auth(&format!("/api/v1/admin/reusable-blocks/{id}"), &tok),
|
|
)
|
|
.await;
|
|
assert_eq!(s, StatusCode::NOT_FOUND);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn delete_reusable_block_not_found() {
|
|
let (mut app, _, tok) = admin_setup().await;
|
|
let fake = uuid::Uuid::now_v7().to_string();
|
|
let (status, _) = send(
|
|
&mut app,
|
|
delete_auth(&format!("/api/v1/admin/reusable-blocks/{fake}"), &tok),
|
|
)
|
|
.await;
|
|
assert_eq!(status, StatusCode::NOT_FOUND);
|
|
}
|