diff --git a/src/identity/application/services/login/command.rs b/src/identity/application/services/login/command.rs index 6440053..fc58aeb 100644 --- a/src/identity/application/services/login/command.rs +++ b/src/identity/application/services/login/command.rs @@ -27,6 +27,12 @@ impl LoginCommand { mod tests { use super::*; + impl LoginCommand { + pub fn get_cmd() -> Self { + LoginCommand { success: true } + } + } + #[test] fn test_cmd() { let config = argon2_creds::Config::default(); diff --git a/src/identity/application/services/login/events.rs b/src/identity/application/services/login/events.rs index 84b0b25..41a60ac 100644 --- a/src/identity/application/services/login/events.rs +++ b/src/identity/application/services/login/events.rs @@ -15,3 +15,17 @@ impl LoginEvent { Self { success } } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::identity::application::services::login::command::*; + + impl LoginEvent { + pub fn get_event(cmd: &LoginCommand) -> Self { + Self { + success: *cmd.success(), + } + } + } +} diff --git a/src/identity/application/services/login/mod.rs b/src/identity/application/services/login/mod.rs index cc50d1a..9d1676c 100644 --- a/src/identity/application/services/login/mod.rs +++ b/src/identity/application/services/login/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 LoginUseCase: Send + Sync { async fn login( diff --git a/src/identity/application/services/login/service.rs b/src/identity/application/services/login/service.rs index 2b2187a..61f4c45 100644 --- a/src/identity/application/services/login/service.rs +++ b/src/identity/application/services/login/service.rs @@ -21,6 +21,21 @@ impl LoginUseCase for LoginService { mod tests { use super::*; + impl LoginService { + pub fn mock_service(times: Option, cmd: command::LoginCommand) -> LoginServiceObj { + let mut m = MockLoginUseCase::default(); + let res = events::LoginEvent::get_event(&cmd); + + if let Some(times) = times { + m.expect_login().times(times).return_const(res); + } else { + m.expect_login().return_const(res); + } + + std::sync::Arc::new(m) + } + } + #[actix_rt::test] async fn test_service() { let config = argon2_creds::Config::default(); @@ -31,9 +46,7 @@ mod tests { let s = LoginService; { - let cmd = - command::LoginCommand::new(username.into(), password.into(), &hashed_password) - .unwrap(); + let cmd = command::LoginCommand::get_cmd(); let res = s.login(cmd.clone()).await; assert_eq!(res.success(), cmd.success()); }