Files
imphnen-backend-service/tests/src/iam/permissions/permissions_repository_test.rs
T
MythEclipse 7056f8c8a6 Add comprehensive tests for IAM permissions, roles, teams, and users
- Implemented unit tests for PermissionsController and PermissionsService, covering create, read, update, and delete operations.
- Added tests for RolesController and RolesService, including handling of duplicates and retrieval by ID.
- Developed tests for TeamsController, including creation, retrieval, updating, deletion, and search functionality.
- Created tests for UsersController, ensuring user creation and validation of attributes.
- Each test includes setup, execution, and cleanup to maintain database integrity.
2025-09-25 22:06:21 +07:00

200 lines
6.2 KiB
Rust

#[cfg(test)]
mod tests {
use imphnen_iam::{
PermissionsSchema, ResourceEnum,
};
use imphnen_utils::{make_thing_from_enum};
use surrealdb::Uuid;
use imphnen_entities::MetaRequestDto;
#[tokio::test]
async fn test_query_create_permission() {
let app_state = crate::get_app_state().await;
let repo = imphnen_iam::PermissionsRepository::new(&app_state);
// Test data
let permission_name = "test_permission_repo_create".to_string();
let permission = PermissionsSchema {
id: make_thing_from_enum(ResourceEnum::Permissions, &Uuid::new_v4().to_string()),
name: permission_name.clone(),
is_deleted: false,
created_at: None,
updated_at: None,
};
// Create permission
let result = repo.query_create_permission(permission.clone()).await;
assert!(result.is_ok(), "Failed to create permission: {:?}", result.err());
// Verify permission was created
let created_permission = repo
.query_permission_by_name(permission_name.clone())
.await
.unwrap();
assert_eq!(created_permission.name, permission_name);
// Clean up
let _ = repo.query_delete_permission(created_permission.id.id.to_raw()).await;
}
#[tokio::test]
async fn test_query_permission_by_name() {
let app_state = crate::get_app_state().await;
let repo = imphnen_iam::PermissionsRepository::new(&app_state);
// Test data
let permission_name = "test_permission_repo_by_name".to_string();
let permission = PermissionsSchema {
id: make_thing_from_enum(ResourceEnum::Permissions, &Uuid::new_v4().to_string()),
name: permission_name.clone(),
is_deleted: false,
created_at: None,
updated_at: None,
};
// Create permission
let create_result = repo.query_create_permission(permission.clone()).await;
assert!(create_result.is_ok());
// Query permission by name
let result = repo.query_permission_by_name(permission_name.clone()).await;
assert!(result.is_ok());
let found_permission = result.unwrap();
assert_eq!(found_permission.name, permission_name);
// Query non-existent permission
let non_existent_result = repo.query_permission_by_name("non_existent".to_string()).await;
assert!(non_existent_result.is_err());
assert!(non_existent_result.err().unwrap().to_string().contains("not found"));
// Clean up
let _ = repo.query_delete_permission(found_permission.id.id.to_raw()).await;
}
#[tokio::test]
async fn test_query_permission_list() {
let app_state = crate::get_app_state().await;
let repo = imphnen_iam::PermissionsRepository::new(&app_state);
// Create test permissions
let permission_names = vec![
"test_permission_list_1".to_string(),
"test_permission_list_2".to_string(),
"test_permission_list_3".to_string(),
];
for name in &permission_names {
let permission = PermissionsSchema {
id: make_thing_from_enum(ResourceEnum::Permissions, &Uuid::new_v4().to_string()),
name: name.clone(),
is_deleted: false,
created_at: None,
updated_at: None,
};
let _ = repo.query_create_permission(permission).await;
}
// Query permission list
let meta = MetaRequestDto {
page: Some(1),
per_page: Some(10),
search: None,
filter: None,
sort_by: None,
order: None,
filter_by: None,
};
let result = repo.query_permission_list(meta).await;
assert!(result.is_ok());
let permission_list = result.unwrap();
assert_eq!(permission_list.data.len(), 3);
// Clean up
for name in permission_names {
let permission = repo.query_permission_by_name(name).await.unwrap();
let _ = repo.query_delete_permission(permission.id.id.to_raw()).await;
}
}
#[tokio::test]
async fn test_query_update_permission() {
let app_state = crate::get_app_state().await;
let repo = imphnen_iam::PermissionsRepository::new(&app_state);
// Test data
let original_name = "test_permission_update_original".to_string();
let new_name = "test_permission_update_updated".to_string();
let permission = PermissionsSchema {
id: make_thing_from_enum(ResourceEnum::Permissions, &Uuid::new_v4().to_string()),
name: original_name.clone(),
is_deleted: false,
created_at: None,
updated_at: None,
};
// Create permission
let create_result = repo.query_create_permission(permission.clone()).await;
assert!(create_result.is_ok());
// Get created permission
let created_permission = repo.query_permission_by_name(original_name).await.unwrap();
// Update permission
let updated_permission = PermissionsSchema {
id: created_permission.id.clone(),
name: new_name.clone(),
is_deleted: created_permission.is_deleted,
created_at: created_permission.created_at,
updated_at: created_permission.updated_at,
};
let update_result = repo.query_update_permission(updated_permission).await;
assert!(update_result.is_ok());
// Verify permission was updated
let result = repo.query_permission_by_name(new_name.clone()).await;
assert!(result.is_ok());
let found_permission = result.unwrap();
assert_eq!(found_permission.name, new_name);
// Clean up
let _ = repo.query_delete_permission(found_permission.id.id.to_raw()).await;
}
#[tokio::test]
async fn test_query_delete_permission() {
let app_state = crate::get_app_state().await;
let repo = imphnen_iam::PermissionsRepository::new(&app_state);
// Test data
let permission_name = "test_permission_delete".to_string();
let permission = PermissionsSchema {
id: make_thing_from_enum(ResourceEnum::Permissions, &Uuid::new_v4().to_string()),
name: permission_name.clone(),
is_deleted: false,
created_at: None,
updated_at: None,
};
// Create permission
let create_result = repo.query_create_permission(permission.clone()).await;
assert!(create_result.is_ok());
// Get created permission
let created_permission = repo.query_permission_by_name(permission_name).await.unwrap();
// Verify permission exists before deletion
let exists_before = repo.query_permission_by_id(created_permission.id.id.to_raw()).await.is_ok();
assert!(exists_before);
// Delete permission
let delete_result = repo.query_delete_permission(created_permission.id.id.to_raw()).await;
assert!(delete_result.is_ok());
// Verify permission was deleted
let exists_after = repo.query_permission_by_id(created_permission.id.id.to_raw()).await.is_ok();
assert!(!exists_after);
}
}