use async_nats::jetstream::{self, stream::Config as StreamConfig}; use runner::config::Settings; use runner::stream::JetStreamClient; use runner::types::{ CommandId, EffectName, EffectResultEnvelope, EffectResultType, MessageMetadata, TenantId, }; use serde_json::json; #[test] #[ignore] fn jetstream_connects_and_can_publish_effect_result() { let Ok(nats_url) = std::env::var("RUNNER_TEST_NATS_URL") else { return; }; let rt = tokio::runtime::Runtime::new().unwrap(); rt.block_on(async move { let client = async_nats::connect(&nats_url).await.unwrap(); let js = jetstream::new(client); let _ = js .get_or_create_stream(StreamConfig { name: "AGGREGATE_EVENTS".to_string(), subjects: vec!["tenant.*.aggregate.*.*".to_string()], ..Default::default() }) .await .unwrap(); let settings = Settings { nats_url, ..Default::default() }; let runner_js = JetStreamClient::connect(&settings).await.unwrap(); let result = EffectResultEnvelope { tenant_id: TenantId::new("t1"), command_id: CommandId::new("c1"), effect_name: EffectName::new("noop"), result_type: EffectResultType::Succeeded, payload: json!({"ok": true}), timestamp: chrono::Utc::now(), metadata: MessageMetadata::default(), }; runner_js.publish_effect_result(&result).await.unwrap(); }); }