use application::sharing::{ShareResourceCommand, ShareResourceHandler}; use application::testing::{InMemoryShareRepository, StubEventPublisher}; use domain::entities::{ScopeType, ShareableType, TargetType}; use domain::value_objects::SystemId; use std::sync::Arc; #[tokio::test] async fn shares_with_user() { let share_repo = Arc::new(InMemoryShareRepository::new()); let event_pub = Arc::new(StubEventPublisher::new()); let handler = ShareResourceHandler::new(share_repo, event_pub.clone()); let (scope, target) = handler .execute(ShareResourceCommand { shareable_type: ShareableType::Album, shareable_id: SystemId::new(), target_type: TargetType::User, target_id: SystemId::new(), role_id: SystemId::new(), created_by: SystemId::new(), }) .await .unwrap(); assert_eq!(scope.scope_type, ScopeType::User); assert_eq!(target.target_type, TargetType::User); assert_eq!(target.scope_id, scope.scope_id); let events = event_pub.published().await; assert_eq!(events.len(), 1); } #[tokio::test] async fn shares_with_group() { let share_repo = Arc::new(InMemoryShareRepository::new()); let event_pub = Arc::new(StubEventPublisher::new()); let handler = ShareResourceHandler::new(share_repo, event_pub.clone()); let (scope, target) = handler .execute(ShareResourceCommand { shareable_type: ShareableType::Asset, shareable_id: SystemId::new(), target_type: TargetType::Group, target_id: SystemId::new(), role_id: SystemId::new(), created_by: SystemId::new(), }) .await .unwrap(); assert_eq!(scope.scope_type, ScopeType::Group); assert_eq!(target.target_type, TargetType::Group); }