diff --git a/crates/vnidrop/tests/approval.rs b/crates/vnidrop/tests/approval.rs index a09253b..726fa4d 100644 --- a/crates/vnidrop/tests/approval.rs +++ b/crates/vnidrop/tests/approval.rs @@ -73,14 +73,23 @@ fn public_share_receives_without_sender_approval() { assert_eq!(deliveries[0].receiver_name.as_deref(), Some("Receiver")); assert_eq!(deliveries[0].status, "completed"); assert!(deliveries[0].completed_at.is_some()); - assert!( - sender.sink.events().iter().any(|event| { + // The repository commit becomes visible just before the receipt handler + // emits its event, so completion and sink observation are not atomic. + let started = Instant::now(); + loop { + if sender.sink.events().iter().any(|event| { event.phase == "delivery" && event.kind == "receiver-completed" && event.transfer_id == Some(share.transfer_id) - }), - "delivery receipts must emit a delivery phase event for UI live updates" - ); + }) { + break; + } + assert!( + started.elapsed() < Duration::from_secs(5), + "delivery receipts must emit a delivery phase event for UI live updates" + ); + std::thread::sleep(Duration::from_millis(10)); + } } #[test]