feat: worker relays outbox to nats

This commit is contained in:
2026-10-26 00:06:09 +01:00
parent 32dfc84697
commit c06d3d9207
15 changed files with 678 additions and 102 deletions

View File

@@ -0,0 +1,46 @@
use super::*;
use domain::value_objects::UserId;
use event_payload::{EventMessage, EventPayload};
use uuid::Uuid;
fn payload() -> EventPayload {
EventPayload::from(&DomainEvent::UserUpdated {
user_id: UserId::from_uuid(Uuid::new_v4()),
})
}
fn encode(event_id: Option<&str>) -> Vec<u8> {
serde_json::to_vec(&EventMessage {
event_id: event_id.map(str::to_owned),
payload: payload(),
})
.unwrap()
}
#[test]
fn decode_message_reads_the_event_id() {
let id = Uuid::new_v4();
let (decoded, event) = decode_message(&encode(Some(&id.to_string()))).unwrap();
assert_eq!(decoded.unwrap().value(), id);
assert!(matches!(event, DomainEvent::UserUpdated { .. }));
}
#[test]
fn decode_message_accepts_a_legacy_payload_without_an_id() {
let legacy = serde_json::to_vec(&payload()).unwrap();
let (decoded, _) = decode_message(&legacy).unwrap();
assert!(decoded.is_none());
let (decoded, _) = decode_message(&encode(None)).unwrap();
assert!(decoded.is_none());
}
#[test]
fn decode_message_rejects_a_malformed_id() {
let err = decode_message(&encode(Some("not-a-uuid"))).unwrap_err();
assert!(err.to_string().contains("event_id"), "{err}");
}
#[test]
fn decode_message_rejects_garbage() {
assert!(decode_message(b"{not json").is_err());
}