Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
//! L1 tests for [`TokioBroadcastEventBus`]: a published [`DomainEvent`] is
|
|
//! received both through the blocking `subscribe()` [`EventStream`] and through
|
|
//! the async `raw_receiver()` used by the Tauri event relay.
|
|
|
|
use domain::events::DomainEvent;
|
|
use domain::ports::EventBus;
|
|
use domain::ProjectId;
|
|
use infrastructure::TokioBroadcastEventBus;
|
|
use uuid::Uuid;
|
|
|
|
fn sample_event() -> DomainEvent {
|
|
DomainEvent::ProjectCreated {
|
|
project_id: ProjectId::from_uuid(Uuid::nil()),
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn raw_receiver_gets_published_event() {
|
|
let bus = TokioBroadcastEventBus::new();
|
|
let mut rx = bus.raw_receiver();
|
|
|
|
bus.publish(sample_event());
|
|
|
|
let got = rx.recv().await.expect("event received");
|
|
assert_eq!(got, sample_event());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn raw_receiver_fans_out_to_multiple_subscribers() {
|
|
let bus = TokioBroadcastEventBus::new();
|
|
let mut rx1 = bus.raw_receiver();
|
|
let mut rx2 = bus.raw_receiver();
|
|
|
|
bus.publish(sample_event());
|
|
|
|
assert_eq!(rx1.recv().await.unwrap(), sample_event());
|
|
assert_eq!(rx2.recv().await.unwrap(), sample_event());
|
|
}
|
|
|
|
#[test]
|
|
fn subscribe_blocking_stream_yields_published_event() {
|
|
let bus = TokioBroadcastEventBus::new();
|
|
let mut stream = bus.subscribe();
|
|
bus.publish(sample_event());
|
|
assert_eq!(stream.next(), Some(sample_event()));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn publish_without_subscribers_is_noop() {
|
|
let bus = TokioBroadcastEventBus::new();
|
|
// No receiver registered: publish must not panic.
|
|
bus.publish(sample_event());
|
|
}
|