Skip to content

Commit 3ad7bbb

Browse files
committed
test: Mark not downloaded message as seen (#2970)
Add a test on what happens currently when apps call `markseen_msgs()` for not downloaded messages. Such messages are marked as seen, but MDNs aren't sent for them. This is probably correct, but when a message is downloaded, its state should be downgraded to `InNoticed` and when the user really sees it, the app should issue `markseen_msgs()` again and that should trigger sending an MDN. Currently when such a message is downloaded, it remains `InSeen`.
1 parent 78a0d75 commit 3ad7bbb

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

Diff for: src/message.rs

+37
Original file line numberDiff line numberDiff line change
@@ -2577,6 +2577,43 @@ mod tests {
25772577
Ok(())
25782578
}
25792579

2580+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
2581+
async fn test_markseen_not_downloaded_msg() -> Result<()> {
2582+
let mut tcm = TestContextManager::new();
2583+
let alice = &tcm.alice().await;
2584+
alice.set_config(Config::DownloadLimit, Some("1")).await?;
2585+
let bob = &tcm.bob().await;
2586+
let bob_chat_id = tcm.send_recv_accept(alice, bob, "hi").await.chat_id;
2587+
2588+
let file_bytes = include_bytes!("../test-data/image/screenshot.png");
2589+
let mut msg = Message::new(Viewtype::Image);
2590+
msg.set_file_from_bytes(bob, "a.jpg", file_bytes, None)
2591+
.await?;
2592+
let sent_msg = bob.send_msg(bob_chat_id, &mut msg).await;
2593+
let msg = alice.recv_msg(&sent_msg).await;
2594+
assert_eq!(msg.download_state, DownloadState::Available);
2595+
assert!(!msg.param.get_bool(Param::WantsMdn).unwrap_or_default());
2596+
assert_eq!(msg.state, MessageState::InFresh);
2597+
markseen_msgs(alice, vec![msg.id]).await?;
2598+
let msg = Message::load_from_db(alice, msg.id).await?;
2599+
assert_eq!(msg.state, MessageState::InSeen);
2600+
assert!(
2601+
!alice
2602+
.sql
2603+
.exists("SELECT COUNT(*) FROM smtp_mdns", ())
2604+
.await?
2605+
);
2606+
2607+
alice.set_config(Config::DownloadLimit, None).await?;
2608+
let msg = alice.recv_msg(&sent_msg).await;
2609+
assert_eq!(msg.download_state, DownloadState::Done);
2610+
assert!(msg.param.get_bool(Param::WantsMdn).unwrap_or_default());
2611+
assert!(msg.get_showpadlock());
2612+
assert_eq!(msg.state, MessageState::InSeen);
2613+
2614+
Ok(())
2615+
}
2616+
25802617
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
25812618
async fn test_get_state() -> Result<()> {
25822619
let alice = TestContext::new_alice().await;

0 commit comments

Comments
 (0)