@@ -14,7 +14,9 @@ use crate::contact;
1414use crate :: imap:: prefetch_should_download;
1515use crate :: imex:: { ImexMode , imex} ;
1616use crate :: key;
17+ use crate :: message:: markseen_msgs;
1718use crate :: securejoin:: get_securejoin_qr;
19+ use crate :: smtp;
1820use crate :: test_utils:: {
1921 TestContext , TestContextManager , alice_keypair, get_chat_msg, mark_as_verified,
2022} ;
@@ -2655,6 +2657,32 @@ async fn test_read_receipts_dont_unmark_bots() -> Result<()> {
26552657 Ok ( ( ) )
26562658}
26572659
2660+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 2 ) ]
2661+ async fn test_self_mdn_before_msg ( ) -> Result < ( ) > {
2662+ let mut tcm = TestContextManager :: new ( ) ;
2663+ let alice = & tcm. alice ( ) . await ;
2664+ let bob = & tcm. bob ( ) . await ;
2665+ let bob2 = & tcm. bob ( ) . await ;
2666+ let alice_chat = alice. create_chat ( bob) . await ;
2667+
2668+ let sent = alice. send_text ( alice_chat. id , "hi" ) . await ;
2669+ let msg = bob. recv_msg ( & sent) . await ;
2670+ msg. chat_id . accept ( bob) . await ?;
2671+ markseen_msgs ( bob, vec ! [ msg. id] ) . await ?;
2672+ smtp:: queue_mdn ( bob) . await ?;
2673+ let sent_mdn = bob. pop_sent_msg ( ) . await ;
2674+
2675+ let Err ( err) = receive_imf ( bob2, sent_mdn. payload ( ) . as_bytes ( ) , false ) . await else {
2676+ unreachable ! ( ) ;
2677+ } ;
2678+ assert ! ( format!( "{err:#}" ) . contains( "(SKIP_DEVICE_MSG)" ) ) ;
2679+ let msg = bob2. recv_msg ( & sent) . await ;
2680+ assert_eq ! ( msg. get_state( ) , MessageState :: InFresh ) ;
2681+ bob2. recv_msg_trash ( & sent_mdn) . await ;
2682+ assert_eq ! ( msg. id. get_state( bob2) . await ?, MessageState :: InSeen ) ;
2683+ Ok ( ( ) )
2684+ }
2685+
26582686#[ tokio:: test( flavor = "multi_thread" , worker_threads = 2 ) ]
26592687async fn test_gmx_forwarded_msg ( ) -> Result < ( ) > {
26602688 let t = TestContext :: new_alice ( ) . await ;
0 commit comments