feat: add main features

Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
This commit is contained in:
2026-06-06 01:27:01 +02:00
parent 55b3bee2c8
commit 307ae71857
273 changed files with 48740 additions and 0 deletions

View File

@ -0,0 +1,53 @@
//! 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());
}