use std::sync::Arc; use domain::testing::{InMemoryChannelRepository, NoopEventPublisher}; use domain::value_objects::{ChannelId, UserId}; use crate::channels::commands::CreateChannelCommand; use crate::channels::deps::{ChannelCommandDeps, ChannelQueryDeps}; use crate::channels::queries::GetChannelQuery; use crate::channels::{create, get}; fn make_deps() -> (ChannelCommandDeps, ChannelQueryDeps) { let repo = Arc::new(InMemoryChannelRepository::new()); let cmd_deps = ChannelCommandDeps { channel_command: repo.clone(), channel_query: repo.clone(), event_publisher: Arc::new(NoopEventPublisher::new()), }; let query_deps = ChannelQueryDeps { channel_query: repo, }; (cmd_deps, query_deps) } #[tokio::test] async fn get_existing_channel() { let (cmd_deps, query_deps) = make_deps(); let channel = create::execute( &cmd_deps, CreateChannelCommand { owner_id: UserId::generate(), name: "Findable".into(), timezone: "UTC".into(), }, ) .await .unwrap(); let found = get::execute( &query_deps, GetChannelQuery { channel_id: channel.id(), }, ) .await .unwrap(); assert!(found.is_some()); assert_eq!(found.unwrap().name(), "Findable"); } #[tokio::test] async fn get_nonexistent_returns_none() { let (_, query_deps) = make_deps(); let found = get::execute( &query_deps, GetChannelQuery { channel_id: ChannelId::generate(), }, ) .await .unwrap(); assert!(found.is_none()); }