Files
imphnen-backend-service/tests/src/gacha/gacha_credits_service_test.rs
T
MythEclipse f3d88e2ac9 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.
2025-09-25 22:53:26 +07:00

258 lines
9.3 KiB
Rust

#[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;
}
}