use application::identity::{ GetProfileHandler, GetProfileQuery, RegisterUserCommand, RegisterUserHandler, }; use application::testing::{InMemoryUserRepository, StubPasswordHasher}; use domain::errors::DomainError; use domain::value_objects::SystemId; use std::sync::Arc; #[tokio::test] async fn returns_existing_user() { let repo = Arc::new(InMemoryUserRepository::new()); let reg = RegisterUserHandler::new(repo.clone(), Arc::new(StubPasswordHasher)); let user = reg .execute(RegisterUserCommand { username: "alice".into(), email: "alice@example.com".into(), password: "password123".into(), }) .await .unwrap(); let handler = GetProfileHandler::new(repo); let found = handler .execute(GetProfileQuery { user_id: user.id }) .await .unwrap(); assert_eq!(found.username, "alice"); } #[tokio::test] async fn returns_not_found_for_missing_user() { let repo = Arc::new(InMemoryUserRepository::new()); let handler = GetProfileHandler::new(repo); let result = handler .execute(GetProfileQuery { user_id: SystemId::new(), }) .await; assert!(matches!(result, Err(DomainError::NotFound(_)))); }