From f73ff9b36ef2d3e51e23fd10d591a00f0a0bec8c Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Tue, 21 Jan 2025 14:57:39 +0530 Subject: [PATCH] feat: mock set_user_admin service and test init utils for cmd and event --- .../services/set_user_admin/command.rs | 37 +++++++++++-------- .../services/set_user_admin/events.rs | 15 ++++++++ .../services/set_user_admin/mod.rs | 3 ++ .../services/set_user_admin/service.rs | 34 +++++++++-------- 4 files changed, 59 insertions(+), 30 deletions(-) diff --git a/src/identity/application/services/set_user_admin/command.rs b/src/identity/application/services/set_user_admin/command.rs index 778f9f5..0002d56 100644 --- a/src/identity/application/services/set_user_admin/command.rs +++ b/src/identity/application/services/set_user_admin/command.rs @@ -34,21 +34,7 @@ mod tests { async fn test_cmd() { let username = "realaravinth"; - SetAdminCommand::new( - UserBuilder::default() - .first_name(username.into()) - .last_name(username.into()) - .email(username.into()) - .hashed_password(username.into()) - .is_verified(true) - .email_verified(false) - .is_admin(true) - .deleted(false) - .user_id(UUID) - .build() - .unwrap(), - ) - .unwrap(); + SetAdminCommand::get_cmd(); assert_eq!( SetAdminCommand::new( @@ -69,4 +55,25 @@ mod tests { Some(IdentityCommandError::PermissionDenied) ); } + + impl SetAdminCommand { + pub fn get_cmd() -> Self { + let u = User::default(); + Self::new( + UserBuilder::default() + .first_name(u.first_name().clone()) + .last_name(u.last_name().clone()) + .email(u.email().clone()) + .hashed_password(u.hashed_password().clone()) + .is_verified(true) + .email_verified(false) + .is_admin(true) + .deleted(false) + .user_id(*u.user_id()) + .build() + .unwrap(), + ) + .unwrap() + } + } } diff --git a/src/identity/application/services/set_user_admin/events.rs b/src/identity/application/services/set_user_admin/events.rs index ad246ee..128024a 100644 --- a/src/identity/application/services/set_user_admin/events.rs +++ b/src/identity/application/services/set_user_admin/events.rs @@ -17,3 +17,18 @@ impl UserPromotedToAdminEvent { Self { promoted_by_user } } } + +#[cfg(test)] +mod tests { + use super::*; + + use crate::identity::application::services::set_user_admin::command::SetAdminCommand; + + impl UserPromotedToAdminEvent { + pub fn get_event(cmd: &SetAdminCommand) -> Self { + Self { + promoted_by_user: cmd.promoted_by_user().clone(), + } + } + } +} diff --git a/src/identity/application/services/set_user_admin/mod.rs b/src/identity/application/services/set_user_admin/mod.rs index 0676f01..5e5c5a5 100644 --- a/src/identity/application/services/set_user_admin/mod.rs +++ b/src/identity/application/services/set_user_admin/mod.rs @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2024 Aravinth Manivannan // // SPDX-License-Identifier: AGPL-3.0-or-later +use mockall::predicate::*; +use mockall::*; pub mod command; pub mod events; @@ -8,6 +10,7 @@ pub mod service; use super::errors::*; +#[automock] #[async_trait::async_trait] pub trait SetUserAdminUseCase: Send + Sync { async fn set_user_admin( diff --git a/src/identity/application/services/set_user_admin/service.rs b/src/identity/application/services/set_user_admin/service.rs index b3f2448..163f90c 100644 --- a/src/identity/application/services/set_user_admin/service.rs +++ b/src/identity/application/services/set_user_admin/service.rs @@ -26,26 +26,30 @@ mod tests { #[actix_rt::test] async fn test_service() { - let username = "realaravinth"; - let s = SetUserAdminService; - let u = UserBuilder::default() - .first_name(username.into()) - .last_name(username.into()) - .email(username.into()) - .hashed_password(username.into()) - .is_verified(true) - .email_verified(false) - .is_admin(true) - .deleted(false) - .user_id(UUID) - .build() - .unwrap(); - let cmd = command::SetAdminCommand::new(u).unwrap(); + let cmd = command::SetAdminCommand::get_cmd(); assert_eq!( s.set_user_admin(cmd.clone()).await.promoted_by_user(), cmd.promoted_by_user() ) } + + impl SetUserAdminService { + pub fn mock_service( + times: Option, + cmd: command::SetAdminCommand, + ) -> SetUserAdminServiceObj { + let mut m = MockSetUserAdminUseCase::default(); + let res = events::UserPromotedToAdminEvent::get_event(&cmd); + + if let Some(times) = times { + m.expect_set_user_admin().times(times).return_const(res); + } else { + m.expect_set_user_admin().return_const(res); + } + + std::sync::Arc::new(m) + } + } }