mirror of
https://github.com/RaisFast/raisfast.git
synced 2026-09-24 08:02:36 +00:00
144 lines
4.5 KiB
Rust
144 lines
4.5 KiB
Rust
use super::*;
|
|
|
|
async fn admin_token() -> String {
|
|
let pool = test_pool().await;
|
|
let (int_id, doc_id) = create_admin(&pool).await;
|
|
make_token(&doc_id, int_id, raisfast::models::user::UserRole::Admin)
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn list_roles() {
|
|
let (mut app, _) = test_app().await;
|
|
let tok = admin_token().await;
|
|
let (status, body) = send(&mut app, get_auth("/api/v1/admin/rbac/roles", &tok)).await;
|
|
assert!(status.is_success(), "list roles: {status} {body:?}");
|
|
assert_eq!(body["code"], 0);
|
|
assert!(body["data"]["items"].is_array());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn create_role_returns_in_list() {
|
|
let (mut app, _) = test_app().await;
|
|
let tok = admin_token().await;
|
|
let role_name = format!("editor-{}", &uuid::Uuid::now_v7().to_string()[..8]);
|
|
|
|
let (status, body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/rbac/roles",
|
|
json!({"name": role_name, "description": "Editor role"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "create role: {status} {body:?}");
|
|
assert_eq!(body["data"]["name"], role_name);
|
|
let role_id = body["data"]["document_id"].as_str().unwrap().to_string();
|
|
|
|
let (status, body) = send(&mut app, get_auth("/api/v1/admin/rbac/roles", &tok)).await;
|
|
assert!(status.is_success(), "list roles: {status} {body:?}");
|
|
let items = body["data"]["items"].as_array().unwrap();
|
|
let found = items.iter().any(|r| r["document_id"] == role_id);
|
|
assert!(found, "created role should appear in list");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn update_role() {
|
|
let (mut app, _) = test_app().await;
|
|
let tok = admin_token().await;
|
|
|
|
let (_, create_body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/rbac/roles",
|
|
json!({"name": format!("mod-{}", &uuid::Uuid::now_v7().to_string()[..8])}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let id = create_body["data"]["document_id"].as_str().unwrap();
|
|
|
|
let new_name = format!("super-{}", &uuid::Uuid::now_v7().to_string()[..8]);
|
|
let (status, body) = send(
|
|
&mut app,
|
|
put_json_auth(
|
|
&format!("/api/v1/admin/rbac/roles/{id}"),
|
|
json!({"name": new_name, "description": "updated"}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "update role: {status} {body:?}");
|
|
assert_eq!(body["data"]["name"], new_name);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn delete_role() {
|
|
let (mut app, _) = test_app().await;
|
|
let tok = admin_token().await;
|
|
|
|
let role_name = format!("del-{}", &uuid::Uuid::now_v7().to_string()[..8]);
|
|
let (_, create_body) = send(
|
|
&mut app,
|
|
post_json_auth("/api/v1/admin/rbac/roles", json!({"name": role_name}), &tok),
|
|
)
|
|
.await;
|
|
let id = create_body["data"]["document_id"].as_str().unwrap();
|
|
|
|
let (status, _) = send(
|
|
&mut app,
|
|
delete_auth(&format!("/api/v1/admin/rbac/roles/{id}"), &tok),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "delete role: {status}");
|
|
|
|
let (status, body) = send(&mut app, get_auth("/api/v1/admin/rbac/roles", &tok)).await;
|
|
assert!(status.is_success());
|
|
let items = body["data"]["items"].as_array().unwrap();
|
|
let found = items.iter().any(|r| r["document_id"] == id);
|
|
assert!(!found, "deleted role should not appear in list");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn set_and_get_permissions() {
|
|
let (mut app, _) = test_app().await;
|
|
let tok = admin_token().await;
|
|
|
|
let (_, create_body) = send(
|
|
&mut app,
|
|
post_json_auth(
|
|
"/api/v1/admin/rbac/roles",
|
|
json!({"name": format!("perm-{}", &uuid::Uuid::now_v7().to_string()[..8])}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
let role_id = create_body["data"]["document_id"].as_str().unwrap();
|
|
|
|
let (status, body) = send(
|
|
&mut app,
|
|
put_json_auth(
|
|
&format!("/api/v1/admin/rbac/roles/{role_id}/permissions"),
|
|
json!({"permissions": [
|
|
{"action": "read", "subject": "posts"},
|
|
{"action": "write", "subject": "comments", "conditions": {"own": "true"}}
|
|
]}),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "set perms: {status} {body:?}");
|
|
|
|
let (status, body) = send(
|
|
&mut app,
|
|
get_auth(
|
|
&format!("/api/v1/admin/rbac/roles/{role_id}/permissions"),
|
|
&tok,
|
|
),
|
|
)
|
|
.await;
|
|
assert!(status.is_success(), "get perms: {status} {body:?}");
|
|
let perms = body["data"].as_array().unwrap();
|
|
assert_eq!(perms.len(), 2);
|
|
}
|