use std::sync::Arc; use application::testing::{InMemoryUserRepository, StubPasswordHasher}; use application::identity::{RegisterUserCommand, RegisterUserHandler, GetProfileQuery, GetProfileHandler}; use domain::errors::DomainError; use domain::value_objects::SystemId; #[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(_)))); }