Add comprehensive tests for Gacha Credits, Auth, and User services
- Implement tests for GachaCreditsService including creation, retrieval, updating, and deletion of gacha credits. - Add tests for AuthController covering user login, registration, email verification, and error handling for invalid credentials. - Enhance AuthService tests to include login, registration, email verification, OTP resend, password reset, and token refresh functionalities. - Create tests for UsersService to validate user creation, retrieval, updating, deletion, and fetching by email. - Ensure all tests utilize a consistent setup and teardown process for database interactions.
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::{generate_unique_email, get_role_id, setup_all_test_environment, UsersRepository};
|
||||
use axum::{http::StatusCode, response::Response};
|
||||
use imphnen_entities::{AppState, MetaRequestDto};
|
||||
use imphnen_gacha::{
|
||||
gacha_credits_service::GachaCreditsService,
|
||||
gacha_credits_dto::{GachaCreditsCreateRequestDto, GachaCreditsUpdateRequestDto},
|
||||
GachaCreditsRepository
|
||||
};
|
||||
use imphnen_iam::users_service::UsersService;
|
||||
use imphnen_utils::{hash_password};
|
||||
use surrealdb::Uuid;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_create_gacha_credits_service() {
|
||||
let app_state = setup_all_test_environment().await;
|
||||
let user_repo = UsersRepository::new(&app_state);
|
||||
let gacha_credits_repo = GachaCreditsRepository::new(&app_state);
|
||||
|
||||
// Create test user first
|
||||
let email = generate_unique_email("test_create_gacha_credits_service");
|
||||
let password = "Password123!".to_string();
|
||||
|
||||
let user_dto = imphnen_iam::users_dto::UserCreateRequestDto {
|
||||
email: email.clone(),
|
||||
password: password.clone(),
|
||||
fullname: "Test Gacha Credits Service".to_string(),
|
||||
phone_number: Some("1234567890".to_string()),
|
||||
role_id: get_role_id(&app_state, "user").await.unwrap(),
|
||||
};
|
||||
|
||||
let _ = UsersService::create_user(&app_state, user_dto).await;
|
||||
let user = user_repo.query_user_by_email(email.clone()).await.unwrap();
|
||||
|
||||
// Test data
|
||||
let gacha_credits_dto = GachaCreditsCreateRequestDto {
|
||||
user_id: user.id.id.to_raw(),
|
||||
amount: 100,
|
||||
description: Some("Test Gacha Credits Service".to_string()),
|
||||
transaction_id: Some("TXN-123456".to_string()),
|
||||
status: "active".to_string(),
|
||||
};
|
||||
|
||||
// Create gacha credits via service
|
||||
let response = GachaCreditsService::create_gacha_credits(&app_state, gacha_credits_dto.clone()).await;
|
||||
|
||||
// Verify response
|
||||
assert_eq!(response.status(), StatusCode::OK);
|
||||
|
||||
// Verify gacha credits was created in database
|
||||
let gacha_credits = gacha_credits_repo.query_gacha_credits_by_user_id(user.id.id.to_raw(), false).await;
|
||||
assert!(gacha_credits.is_ok());
|
||||
assert_eq!(gacha_credits.unwrap().amount, 100);
|
||||
assert_eq!(gacha_credits.unwrap().status, "active".to_string());
|
||||
|
||||
// Clean up
|
||||
let _ = user_repo.query_delete_user(user.id.id.to_raw()).await;
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_gacha_credits_list_service() {
|
||||
let app_state = setup_all_test_environment().await;
|
||||
let user_repo = UsersRepository::new(&app_state);
|
||||
let gacha_credits_repo = GachaCreditsRepository::new(&app_state);
|
||||
|
||||
// Create test user first
|
||||
let email = generate_unique_email("test_gacha_credits_list_service");
|
||||
let password = "Password123!".to_string();
|
||||
|
||||
let user_dto = imphnen_iam::users_dto::UserCreateRequestDto {
|
||||
email: email.clone(),
|
||||
password: password.clone(),
|
||||
fullname: "Test Gacha Credits List Service".to_string(),
|
||||
phone_number: Some("1234567890".to_string()),
|
||||
role_id: get_role_id(&app_state, "user").await.unwrap(),
|
||||
};
|
||||
|
||||
let _ = UsersService::create_user(&app_state, user_dto).await;
|
||||
let user = user_repo.query_user_by_email(email.clone()).await.unwrap();
|
||||
|
||||
// Create test gacha credits
|
||||
let gacha_credits_dto = GachaCreditsCreateRequestDto {
|
||||
user_id: user.id.id.to_raw(),
|
||||
amount: 100,
|
||||
description: Some("Test Gacha Credits List Service".to_string()),
|
||||
transaction_id: Some("TXN-123456".to_string()),
|
||||
status: "active".to_string(),
|
||||
};
|
||||
|
||||
let _ = GachaCreditsService::create_gacha_credits(&app_state, gacha_credits_dto).await;
|
||||
|
||||
// Get gacha credits list via service
|
||||
let meta = MetaRequestDto {
|
||||
limit: 10,
|
||||
page: 1,
|
||||
search: None,
|
||||
sort: None,
|
||||
filter: None,
|
||||
};
|
||||
|
||||
let response = GachaCreditsService::get_gacha_credits_list(&app_state, meta).await;
|
||||
|
||||
// Verify response
|
||||
assert_eq!(response.status(), StatusCode::OK);
|
||||
|
||||
// Clean up
|
||||
let _ = user_repo.query_delete_user(user.id.id.to_raw()).await;
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_gacha_credits_by_id_service() {
|
||||
let app_state = setup_all_test_environment().await;
|
||||
let user_repo = UsersRepository::new(&app_state);
|
||||
let gacha_credits_repo = GachaCreditsRepository::new(&app_state);
|
||||
|
||||
// Create test user first
|
||||
let email = generate_unique_email("test_gacha_credits_by_id_service");
|
||||
let password = "Password123!".to_string();
|
||||
|
||||
let user_dto = imphnen_iam::users_dto::UserCreateRequestDto {
|
||||
email: email.clone(),
|
||||
password: password.clone(),
|
||||
fullname: "Test Gacha Credits By ID Service".to_string(),
|
||||
phone_number: Some("1234567890".to_string()),
|
||||
role_id: get_role_id(&app_state, "user").await.unwrap(),
|
||||
};
|
||||
|
||||
let _ = UsersService::create_user(&app_state, user_dto).await;
|
||||
let user = user_repo.query_user_by_email(email.clone()).await.unwrap();
|
||||
|
||||
// Create test gacha credits
|
||||
let gacha_credits_dto = GachaCreditsCreateRequestDto {
|
||||
user_id: user.id.id.to_raw(),
|
||||
amount: 100,
|
||||
description: Some("Test Gacha Credits By ID Service".to_string()),
|
||||
transaction_id: Some("TXN-123456".to_string()),
|
||||
status: "active".to_string(),
|
||||
};
|
||||
|
||||
let _ = GachaCreditsService::create_gacha_credits(&app_state, gacha_credits_dto).await;
|
||||
let gacha_credits = gacha_credits_repo.query_gacha_credits_by_user_id(user.id.id.to_raw(), false).await.unwrap();
|
||||
let gacha_credits_id = gacha_credits.id.id.to_raw();
|
||||
|
||||
// Get gacha credits by ID via service
|
||||
let response = GachaCreditsService::get_gacha_credits_by_id(&app_state, gacha_credits_id).await;
|
||||
|
||||
// Verify response
|
||||
assert_eq!(response.status(), StatusCode::OK);
|
||||
|
||||
// Clean up
|
||||
let _ = user_repo.query_delete_user(user.id.id.to_raw()).await;
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_update_gacha_credits_service() {
|
||||
let app_state = setup_all_test_environment().await;
|
||||
let user_repo = UsersRepository::new(&app_state);
|
||||
let gacha_credits_repo = GachaCreditsRepository::new(&app_state);
|
||||
|
||||
// Create test user first
|
||||
let email = generate_unique_email("test_update_gacha_credits_service");
|
||||
let password = "Password123!".to_string();
|
||||
|
||||
let user_dto = imphnen_iam::users_dto::UserCreateRequestDto {
|
||||
email: email.clone(),
|
||||
password: password.clone(),
|
||||
fullname: "Test Update Gacha Credits Service".to_string(),
|
||||
phone_number: Some("1234567890".to_string()),
|
||||
role_id: get_role_id(&app_state, "user").await.unwrap(),
|
||||
};
|
||||
|
||||
let _ = UsersService::create_user(&app_state, user_dto).await;
|
||||
let user = user_repo.query_user_by_email(email.clone()).await.unwrap();
|
||||
|
||||
// Create test gacha credits
|
||||
let gacha_credits_dto = GachaCreditsCreateRequestDto {
|
||||
user_id: user.id.id.to_raw(),
|
||||
amount: 100,
|
||||
description: Some("Test Update Gacha Credits Service".to_string()),
|
||||
transaction_id: Some("TXN-123456".to_string()),
|
||||
status: "active".to_string(),
|
||||
};
|
||||
|
||||
let _ = GachaCreditsService::create_gacha_credits(&app_state, gacha_credits_dto).await;
|
||||
let gacha_credits = gacha_credits_repo.query_gacha_credits_by_user_id(user.id.id.to_raw(), false).await.unwrap();
|
||||
let gacha_credits_id = gacha_credits.id.id.to_raw();
|
||||
|
||||
// Prepare update request
|
||||
let update_dto = GachaCreditsUpdateRequestDto {
|
||||
amount: Some(200),
|
||||
description: Some("Updated Test Gacha Credits Service".to_string()),
|
||||
status: Some("used".to_string()),
|
||||
};
|
||||
|
||||
// Update gacha credits via service
|
||||
let response = GachaCreditsService::update_gacha_credits(&app_state, gacha_credits_id, update_dto).await;
|
||||
|
||||
// Verify response
|
||||
assert_eq!(response.status(), StatusCode::OK);
|
||||
|
||||
// Verify gacha credits was updated
|
||||
let updated_gacha_credits = gacha_credits_repo.query_gacha_credits_by_id(&gacha_credits.id, false).await.unwrap();
|
||||
assert_eq!(updated_gacha_credits.amount, 200);
|
||||
assert_eq!(updated_gacha_credits.status, "used".to_string());
|
||||
|
||||
// Clean up
|
||||
let _ = user_repo.query_delete_user(user.id.id.to_raw()).await;
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_delete_gacha_credits_service() {
|
||||
let app_state = setup_all_test_environment().await;
|
||||
let user_repo = UsersRepository::new(&app_state);
|
||||
let gacha_credits_repo = GachaCreditsRepository::new(&app_state);
|
||||
|
||||
// Create test user first
|
||||
let email = generate_unique_email("test_delete_gacha_credits_service");
|
||||
let password = "Password123!".to_string();
|
||||
|
||||
let user_dto = imphnen_iam::users_dto::UserCreateRequestDto {
|
||||
email: email.clone(),
|
||||
password: password.clone(),
|
||||
fullname: "Test Delete Gacha Credits Service".to_string(),
|
||||
phone_number: Some("1234567890".to_string()),
|
||||
role_id: get_role_id(&app_state, "user").await.unwrap(),
|
||||
};
|
||||
|
||||
let _ = UsersService::create_user(&app_state, user_dto).await;
|
||||
let user = user_repo.query_user_by_email(email.clone()).await.unwrap();
|
||||
|
||||
// Create test gacha credits
|
||||
let gacha_credits_dto = GachaCreditsCreateRequestDto {
|
||||
user_id: user.id.id.to_raw(),
|
||||
amount: 100,
|
||||
description: Some("Test Delete Gacha Credits Service".to_string()),
|
||||
transaction_id: Some("TXN-123456".to_string()),
|
||||
status: "active".to_string(),
|
||||
};
|
||||
|
||||
let _ = GachaCreditsService::create_gacha_credits(&app_state, gacha_credits_dto).await;
|
||||
let gacha_credits = gacha_credits_repo.query_gacha_credits_by_user_id(user.id.id.to_raw(), false).await.unwrap();
|
||||
let gacha_credits_id = gacha_credits.id.id.to_raw();
|
||||
|
||||
// Delete gacha credits via service
|
||||
let response = GachaCreditsService::delete_gacha_credits(&app_state, gacha_credits_id).await;
|
||||
|
||||
// Verify response
|
||||
assert_eq!(response.status(), StatusCode::OK);
|
||||
|
||||
// Verify gacha credits was deleted
|
||||
let deleted_gacha_credits = gacha_credits_repo.query_gacha_credits_by_id(&gacha_credits.id, false).await;
|
||||
assert!(deleted_gacha_credits.is_err());
|
||||
|
||||
// Clean up
|
||||
let _ = user_repo.query_delete_user(user.id.id.to_raw()).await;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user