- 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.
258 lines
9.3 KiB
Rust
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;
|
|
}
|
|
} |