Commit 6f47f7cbe75a
tarball2 files changed+49-1
@@ -107,7 +107,7 @@ impl Normaliser<'_> {
107107
timestamp_ms: embedded.timestamp.get().into(),108108
},109109
TimelineDetails::Unavailable => {110
- self.missing_replies.push(reply.event_id.clone());110
+ self.missing_replies.extend(event.event_id().map(ToOwned::to_owned));111111
ReplyDetails::Pending112112
}113113
TimelineDetails::Pending => ReplyDetails::Pending,@@ -614,3 +614,51 @@ async fn closing_during_a_recent_load_settles_idle_not_failed() {
614614
);615615
shut_down(&room.handle, &mut room.events, room.running).await;616616
}617
+618
+#[tokio::test]619
+async fn a_reply_whose_target_is_not_loaded_fetches_it() {620
+ let room_id = room_id!("!replies:localhost");621
+ let target_id = event_id!("$target:localhost");622
+ let reply_id = event_id!("$reply:localhost");623
+ let mut room = start_room(room_id).await;624
+ room.server625
+ .mock_room_messages()626
+ .ok(RoomMessagesResponseTemplate::default())627
+ .mount()628
+ .await;629
+ room.server630
+ .mock_room_event()631
+ .match_event_id()632
+ .ok(EventFactory::new()633
+ .room(room_id)634
+ .text_msg("target")635
+ .event_id(target_id)636
+ .sender(&ALICE)637
+ .into_event())638
+ .mount()639
+ .await;640
+ room.server641
+ .sync_room(642
+ &room.sync_client,643
+ JoinedRoomBuilder::new(room_id).add_timeline_event(644
+ EventFactory::new()645
+ .text_msg("reply")646
+ .reply_to(target_id)647
+ .event_id(reply_id)648
+ .sender(&ALICE),649
+ ),650
+ )651
+ .await;652
+ open_room(&mut room, room_id).await;653
+ timeline_until(&mut room, |items| {654
+ items.iter().any(|item| {655
+ matches!(item, TimelineItem::Event(event)656
+ if event.event_id.as_deref() == Some(reply_id)657
+ && event.reply_to.as_ref().is_some_and(|reply| {658
+ matches!(reply.details, macltok::ReplyDetails::Ready { .. })659
+ }))660
+ })661
+ })662
+ .await;663
+ shut_down(&room.handle, &mut room.events, room.running).await;664
+}