diff --git a/src/calls/calls_tests.rs b/src/calls/calls_tests.rs index 5763236c2..bbd382734 100644 --- a/src/calls/calls_tests.rs +++ b/src/calls/calls_tests.rs @@ -1,4 +1,5 @@ use super::*; +use crate::chat::forward_msgs; use crate::config::Config; use crate::test_utils::{TestContext, TestContextManager}; @@ -498,3 +499,33 @@ async fn test_sdp_has_video() { assert_eq!(sdp_has_video(PLACE_INFO).unwrap(), false); assert_eq!(sdp_has_video(PLACE_INFO_VIDEO).unwrap(), true); } + +/// Tests that calls are forwarded as text messages. +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn test_forward_call() -> Result<()> { + let mut tcm = TestContextManager::new(); + let alice = &tcm.alice().await; + let bob = &tcm.bob().await; + let charlie = &tcm.charlie().await; + + let alice_bob_chat = alice.create_chat(bob).await; + let alice_msg_id = alice + .place_outgoing_call(alice_bob_chat.id, PLACE_INFO.to_string()) + .await + .context("Failed to place a call")?; + let alice_call = Message::load_from_db(alice, alice_msg_id).await?; + + let _alice_sent_call = alice.pop_sent_msg().await; + assert_eq!(alice_call.viewtype, Viewtype::Call); + + let alice_charlie_chat = alice.create_chat(charlie).await; + forward_msgs(alice, &[alice_call.id], alice_charlie_chat.id).await?; + let alice_forwarded_call = alice.pop_sent_msg().await; + let alice_forwarded_call_msg = alice_forwarded_call.load_from_db().await; + assert_eq!(alice_forwarded_call_msg.viewtype, Viewtype::Text); + + let charlie_forwarded_call = charlie.recv_msg(&alice_forwarded_call).await; + assert_eq!(charlie_forwarded_call.viewtype, Viewtype::Text); + + Ok(()) +} diff --git a/src/chat.rs b/src/chat.rs index 805f040a8..7cbabf121 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -4450,6 +4450,10 @@ pub async fn forward_msgs(context: &Context, msg_ids: &[MsgId], chat_id: ChatId) .set_int(Param::Forwarded, src_msg_id.to_u32() as i32); } + if msg.get_viewtype() == Viewtype::Call { + msg.viewtype = Viewtype::Text; + } + msg.param.remove(Param::GuaranteeE2ee); msg.param.remove(Param::ForcePlaintext); msg.param.remove(Param::Cmd); @@ -4459,6 +4463,8 @@ pub async fn forward_msgs(context: &Context, msg_ids: &[MsgId], chat_id: ChatId) msg.param.remove(Param::WebxdcSummary); msg.param.remove(Param::WebxdcSummaryTimestamp); msg.param.remove(Param::IsEdited); + msg.param.remove(Param::WebrtcRoom); + msg.param.remove(Param::WebrtcAccepted); msg.in_reply_to = None; // do not leak data as group names; a default subject is generated by mimefactory