diff --git a/src/chat/chat_tests.rs b/src/chat/chat_tests.rs index 1a4d16d5b..94258773e 100644 --- a/src/chat/chat_tests.rs +++ b/src/chat/chat_tests.rs @@ -298,9 +298,11 @@ async fn test_member_add_remove() -> Result<()> { let alice = tcm.alice().await; let bob = tcm.bob().await; + let fiona = tcm.fiona().await; // Create contact for Bob on the Alice side with name "robert". - let alice_bob_contact_id = Contact::create(&alice, "robert", "bob@example.net").await?; + let alice_bob_contact_id = alice.add_or_lookup_contact_id(&bob).await; + alice_bob_contact_id.set_name(&alice, "robert").await?; // Set Bob authname to "Bob" and send it to Alice. bob.set_config(Config::Displayname, Some("Bob")).await?; @@ -320,19 +322,15 @@ async fn test_member_add_remove() -> Result<()> { // Create and promote a group. let alice_chat_id = create_group_chat(&alice, ProtectionStatus::Unprotected, "Group chat").await?; - let alice_fiona_contact_id = Contact::create(&alice, "Fiona", "fiona@example.net").await?; + let alice_fiona_contact_id = alice.add_or_lookup_contact_id(&fiona).await; add_contact_to_chat(&alice, alice_chat_id, alice_fiona_contact_id).await?; - let sent = alice + alice .send_text(alice_chat_id, "Hi! I created a group.") .await; - assert!(sent.payload.contains("Hi! I created a group.")); // Alice adds Bob to the chat. add_contact_to_chat(&alice, alice_chat_id, alice_bob_contact_id).await?; let sent = alice.pop_sent_msg().await; - assert!(sent - .payload - .contains("I added member Bob (bob@example.net).")); // Locally set name "robert" should not leak. assert!(!sent.payload.contains("robert")); assert_eq!( @@ -343,9 +341,6 @@ async fn test_member_add_remove() -> Result<()> { // Alice removes Bob from the chat. remove_contact_from_chat(&alice, alice_chat_id, alice_bob_contact_id).await?; let sent = alice.pop_sent_msg().await; - assert!(sent - .payload - .contains("I removed member Bob (bob@example.net).")); assert!(!sent.payload.contains("robert")); assert_eq!( sent.load_from_db().await.get_text(), @@ -355,7 +350,6 @@ async fn test_member_add_remove() -> Result<()> { // Alice leaves the chat. remove_contact_from_chat(&alice, alice_chat_id, ContactId::SELF).await?; let sent = alice.pop_sent_msg().await; - assert!(sent.payload.contains("I left the group.")); assert_eq!(sent.load_from_db().await.get_text(), "You left the group."); Ok(()) @@ -368,10 +362,12 @@ async fn test_parallel_member_remove() -> Result<()> { let alice = tcm.alice().await; let bob = tcm.bob().await; + let charlie = tcm.charlie().await; + let fiona = tcm.fiona().await; - let alice_bob_contact_id = Contact::create(&alice, "Bob", "bob@example.net").await?; - let alice_fiona_contact_id = Contact::create(&alice, "Fiona", "fiona@example.net").await?; - let alice_claire_contact_id = Contact::create(&alice, "Claire", "claire@example.net").await?; + let alice_bob_contact_id = alice.add_or_lookup_contact_id(&bob).await; + let alice_fiona_contact_id = alice.add_or_lookup_contact_id(&fiona).await; + let alice_charlie_contact_id = alice.add_or_lookup_contact_id(&charlie).await; // Create and promote a group. let alice_chat_id = @@ -386,8 +382,8 @@ async fn test_parallel_member_remove() -> Result<()> { let bob_chat_id = bob_received_msg.get_chat_id(); bob_chat_id.accept(&bob).await?; - // Alice adds Claire to the chat. - add_contact_to_chat(&alice, alice_chat_id, alice_claire_contact_id).await?; + // Alice adds Charlie to the chat. + add_contact_to_chat(&alice, alice_chat_id, alice_charlie_contact_id).await?; let alice_sent_add_msg = alice.pop_sent_msg().await; // Bob leaves the chat. @@ -680,7 +676,7 @@ async fn test_leave_group() -> Result<()> { // Create group chat with Bob. let alice_chat_id = create_group_chat(&alice, ProtectionStatus::Unprotected, "foo").await?; - let bob_contact = Contact::create(&alice, "", "bob@example.net").await?; + let bob_contact = alice.add_or_lookup_contact(&bob).await.id; add_contact_to_chat(&alice, alice_chat_id, bob_contact).await?; // Alice sends first message to group. @@ -2264,11 +2260,13 @@ async fn test_save_from_saved_to_saved_failing() -> Result<()> { async fn test_resend_own_message() -> Result<()> { // Alice creates group with Bob and sends an initial message let alice = TestContext::new_alice().await; + let bob = TestContext::new_bob().await; + let fiona = TestContext::new_fiona().await; let alice_grp = create_group_chat(&alice, ProtectionStatus::Unprotected, "grp").await?; add_contact_to_chat( &alice, alice_grp, - Contact::create(&alice, "", "bob@example.net").await?, + alice.add_or_lookup_contact_id(&bob).await, ) .await?; let sent1 = alice.send_text(alice_grp, "alice->bob").await; @@ -2277,7 +2275,7 @@ async fn test_resend_own_message() -> Result<()> { add_contact_to_chat( &alice, alice_grp, - Contact::create(&alice, "", "claire@example.org").await?, + alice.add_or_lookup_contact_id(&fiona).await, ) .await?; let sent2 = alice.pop_sent_msg().await; @@ -2321,15 +2319,13 @@ async fn test_resend_own_message() -> Result<()> { assert_eq!(get_chat_contacts(&bob, msg.chat_id).await?.len(), 3); assert_eq!(get_chat_msgs(&bob, msg.chat_id).await?.len(), 2); - // Claire does not receive the first message, however, due to resending, she has a similar view as Alice and Bob - let claire = TestContext::new().await; - claire.configure_addr("claire@example.org").await; - claire.recv_msg(&sent2).await; - let msg = claire.recv_msg(&sent3).await; + // Fiona does not receive the first message, however, due to resending, she has a similar view as Alice and Bob + fiona.recv_msg(&sent2).await; + let msg = fiona.recv_msg(&sent3).await; assert_eq!(msg.get_text(), "alice->bob"); - assert_eq!(get_chat_contacts(&claire, msg.chat_id).await?.len(), 3); - assert_eq!(get_chat_msgs(&claire, msg.chat_id).await?.len(), 2); - let msg_from = Contact::get_by_id(&claire, msg.get_from_id()).await?; + assert_eq!(get_chat_contacts(&fiona, msg.chat_id).await?.len(), 3); + assert_eq!(get_chat_msgs(&fiona, msg.chat_id).await?.len(), 2); + let msg_from = Contact::get_by_id(&fiona, msg.get_from_id()).await?; assert_eq!(msg_from.get_addr(), "alice@example.org"); assert!(sent1_ts_sent < msg.timestamp_sent); @@ -2813,12 +2809,7 @@ async fn test_blob_renaming() -> Result<()> { let alice = TestContext::new_alice().await; let bob = TestContext::new_bob().await; let chat_id = create_group_chat(&alice, ProtectionStatus::Unprotected, "Group").await?; - add_contact_to_chat( - &alice, - chat_id, - Contact::create(&alice, "bob", "bob@example.net").await?, - ) - .await?; + add_contact_to_chat(&alice, chat_id, alice.add_or_lookup_contact_id(&bob).await).await?; let file = alice.get_blobdir().join("harmless_file.\u{202e}txt.exe"); fs::write(&file, "aaa").await?; let mut msg = Message::new(Viewtype::File); @@ -2850,7 +2841,7 @@ async fn test_sync_blocked() -> Result<()> { let sent_msg = bob.send_text(ba_chat.id, "hi").await; let a0b_chat_id = alice0.recv_msg(&sent_msg).await.chat_id; alice1.recv_msg(&sent_msg).await; - let a0b_contact_id = alice0.add_or_lookup_contact(&bob).await.id; + let a0b_contact_id = alice0.add_or_lookup_contact_id(&bob).await; assert_eq!(alice1.get_chat(&bob).await.blocked, Blocked::Request); a0b_chat_id.accept(alice0).await?; @@ -3351,7 +3342,8 @@ async fn test_past_members() -> Result<()> { let mut tcm = TestContextManager::new(); let alice = &tcm.alice().await; - let alice_fiona_contact_id = Contact::create(alice, "Fiona", "fiona@example.net").await?; + let fiona = &tcm.fiona().await; + let alice_fiona_contact_id = alice.add_or_lookup_contact_id(fiona).await; let alice_chat_id = create_group_chat(alice, ProtectionStatus::Unprotected, "Group chat").await?; @@ -3363,8 +3355,7 @@ async fn test_past_members() -> Result<()> { assert_eq!(get_past_chat_contacts(alice, alice_chat_id).await?.len(), 1); let bob = &tcm.bob().await; - let bob_addr = bob.get_config(Config::Addr).await?.unwrap(); - let alice_bob_contact_id = Contact::create(alice, "Bob", &bob_addr).await?; + let alice_bob_contact_id = alice.add_or_lookup_contact_id(bob).await; add_contact_to_chat(alice, alice_chat_id, alice_bob_contact_id).await?; let add_message = alice.pop_sent_msg().await; @@ -3383,8 +3374,7 @@ async fn non_member_cannot_modify_member_list() -> Result<()> { let alice = &tcm.alice().await; let bob = &tcm.bob().await; - let bob_addr = bob.get_config(Config::Addr).await?.unwrap(); - let alice_bob_contact_id = Contact::create(alice, "Bob", &bob_addr).await?; + let alice_bob_contact_id = alice.add_or_lookup_contact_id(bob).await; let alice_chat_id = create_group_chat(alice, ProtectionStatus::Unprotected, "Group chat").await?; @@ -3396,7 +3386,8 @@ async fn non_member_cannot_modify_member_list() -> Result<()> { let bob_chat_id = bob_received_msg.get_chat_id(); bob_chat_id.accept(bob).await?; - let bob_fiona_contact_id = Contact::create(bob, "Fiona", "fiona@example.net").await?; + let fiona = &tcm.fiona().await; + let bob_fiona_contact_id = bob.add_or_lookup_contact_id(fiona).await; // Alice removes Bob and Bob adds Fiona at the same time. remove_contact_from_chat(alice, alice_chat_id, alice_bob_contact_id).await?; @@ -3418,11 +3409,10 @@ async fn unpromoted_group_no_tombstones() -> Result<()> { let alice = &tcm.alice().await; let bob = &tcm.bob().await; + let fiona = &tcm.fiona().await; - let bob_addr = bob.get_config(Config::Addr).await?.unwrap(); - let alice_bob_contact_id = Contact::create(alice, "Bob", &bob_addr).await?; - let fiona_addr = "fiona@example.net"; - let alice_fiona_contact_id = Contact::create(alice, "Fiona", fiona_addr).await?; + let alice_bob_contact_id = alice.add_or_lookup_contact_id(bob).await; + let alice_fiona_contact_id = alice.add_or_lookup_contact_id(fiona).await; let alice_chat_id = create_group_chat(alice, ProtectionStatus::Unprotected, "Group chat").await?; @@ -3438,10 +3428,6 @@ async fn unpromoted_group_no_tombstones() -> Result<()> { assert_eq!(get_past_chat_contacts(alice, alice_chat_id).await?.len(), 0); let sent = alice.send_text(alice_chat_id, "Hello group!").await; - let payload = sent.payload(); - assert_eq!(payload.contains("Hello group!"), true); - assert_eq!(payload.contains(&bob_addr), true); - assert_eq!(payload.contains(fiona_addr), false); let bob_msg = bob.recv_msg(&sent).await; let bob_chat_id = bob_msg.chat_id; @@ -3457,8 +3443,8 @@ async fn test_expire_past_members_after_60_days() -> Result<()> { let mut tcm = TestContextManager::new(); let alice = &tcm.alice().await; - let fiona_addr = "fiona@example.net"; - let alice_fiona_contact_id = Contact::create(alice, "Fiona", fiona_addr).await?; + let fiona = &tcm.fiona().await; + let alice_fiona_contact_id = alice.add_or_lookup_contact_id(fiona).await; let alice_chat_id = create_group_chat(alice, ProtectionStatus::Unprotected, "Group chat").await?; @@ -3473,12 +3459,10 @@ async fn test_expire_past_members_after_60_days() -> Result<()> { assert_eq!(get_past_chat_contacts(alice, alice_chat_id).await?.len(), 0); let bob = &tcm.bob().await; - let bob_addr = bob.get_config(Config::Addr).await?.unwrap(); - let alice_bob_contact_id = Contact::create(alice, "Bob", &bob_addr).await?; + let alice_bob_contact_id = alice.add_or_lookup_contact_id(bob).await; add_contact_to_chat(alice, alice_chat_id, alice_bob_contact_id).await?; let add_message = alice.pop_sent_msg().await; - assert_eq!(add_message.payload.contains(fiona_addr), false); let bob_add_message = bob.recv_msg(&add_message).await; let bob_chat_id = bob_add_message.chat_id; assert_eq!(get_chat_contacts(bob, bob_chat_id).await?.len(), 2); @@ -3552,13 +3536,11 @@ async fn test_restore_backup_after_60_days() -> Result<()> { let alice = &tcm.alice().await; let bob = &tcm.bob().await; + let charlie = &tcm.charlie().await; let fiona = &tcm.fiona().await; - let bob_addr = bob.get_config(Config::Addr).await?.unwrap(); - let alice_bob_contact_id = Contact::create(alice, "Bob", &bob_addr).await?; - - let charlie_addr = "charlie@example.com"; - let alice_charlie_contact_id = Contact::create(alice, "Charlie", charlie_addr).await?; + let alice_bob_contact_id = alice.add_or_lookup_contact_id(bob).await; + let alice_charlie_contact_id = alice.add_or_lookup_contact_id(charlie).await; let alice_chat_id = create_group_chat(alice, ProtectionStatus::Unprotected, "Group chat").await?; @@ -3580,7 +3562,6 @@ async fn test_restore_backup_after_60_days() -> Result<()> { assert_eq!(get_past_chat_contacts(alice, alice_chat_id).await?.len(), 1); let remove_message = alice.pop_sent_msg().await; - assert_eq!(remove_message.payload.contains(charlie_addr), true); bob.recv_msg(&remove_message).await; // 60 days pass. @@ -3589,8 +3570,7 @@ async fn test_restore_backup_after_60_days() -> Result<()> { assert_eq!(get_past_chat_contacts(alice, alice_chat_id).await?.len(), 0); // Bob adds Fiona to the chat. - let fiona_addr = fiona.get_config(Config::Addr).await?.unwrap(); - let bob_fiona_contact_id = Contact::create(bob, "Fiona", &fiona_addr).await?; + let bob_fiona_contact_id = bob.add_or_lookup_contact_id(fiona).await; add_contact_to_chat(bob, bob_chat_id, bob_fiona_contact_id).await?; let add_message = bob.pop_sent_msg().await; @@ -3654,7 +3634,7 @@ async fn test_restore_backup_after_60_days() -> Result<()> { // Charlie is not part of the chat. assert_eq!(get_chat_contacts(bob, bob_chat_id).await?.len(), 3); assert_eq!(get_past_chat_contacts(bob, bob_chat_id).await?.len(), 0); - let bob_charlie_contact_id = Contact::create(bob, "Charlie", charlie_addr).await?; + let bob_charlie_contact_id = bob.add_or_lookup_contact_id(charlie).await; assert!(!is_contact_in_chat(bob, bob_chat_id, bob_charlie_contact_id).await?); assert_eq!(get_chat_contacts(fiona, fiona_chat_id).await?.len(), 3); diff --git a/src/receive_imf/receive_imf_tests.rs b/src/receive_imf/receive_imf_tests.rs index f93ce57fb..81d59dba9 100644 --- a/src/receive_imf/receive_imf_tests.rs +++ b/src/receive_imf/receive_imf_tests.rs @@ -4066,38 +4066,39 @@ async fn test_unsigned_chat_group_hdr() -> Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_sync_member_list_on_rejoin() -> Result<()> { let mut tcm = TestContextManager::new(); - let alice = tcm.alice().await; + let alice = &tcm.alice().await; + let bob = &tcm.bob().await; + let fiona = &tcm.fiona().await; - let bob_id = Contact::create(&alice, "", "bob@example.net").await?; - let claire_id = Contact::create(&alice, "", "claire@example.de").await?; + let bob_id = alice.add_or_lookup_contact_id(bob).await; + let fiona_id = alice.add_or_lookup_contact_id(fiona).await; - let alice_chat_id = create_group_chat(&alice, ProtectionStatus::Unprotected, "foos").await?; - add_contact_to_chat(&alice, alice_chat_id, bob_id).await?; - add_contact_to_chat(&alice, alice_chat_id, claire_id).await?; + let alice_chat_id = create_group_chat(alice, ProtectionStatus::Unprotected, "foos").await?; + add_contact_to_chat(alice, alice_chat_id, bob_id).await?; + add_contact_to_chat(alice, alice_chat_id, fiona_id).await?; - send_text_msg(&alice, alice_chat_id, "populate".to_string()).await?; + send_text_msg(alice, alice_chat_id, "populate".to_string()).await?; let add = alice.pop_sent_msg().await; - let bob = tcm.bob().await; bob.recv_msg(&add).await; let bob_chat_id = bob.get_last_msg().await.chat_id; - assert_eq!(get_chat_contacts(&bob, bob_chat_id).await?.len(), 3); + assert_eq!(get_chat_contacts(bob, bob_chat_id).await?.len(), 3); // remove bob from chat - remove_contact_from_chat(&alice, alice_chat_id, bob_id).await?; + remove_contact_from_chat(alice, alice_chat_id, bob_id).await?; let remove_bob = alice.pop_sent_msg().await; bob.recv_msg(&remove_bob).await; // remove any other member - remove_contact_from_chat(&alice, alice_chat_id, claire_id).await?; + remove_contact_from_chat(alice, alice_chat_id, fiona_id).await?; alice.pop_sent_msg().await; // re-add bob - add_contact_to_chat(&alice, alice_chat_id, bob_id).await?; + add_contact_to_chat(alice, alice_chat_id, bob_id).await?; let add2 = alice.pop_sent_msg().await; bob.recv_msg(&add2).await; // number of members in chat should have updated - assert_eq!(get_chat_contacts(&bob, bob_chat_id).await?.len(), 2); + assert_eq!(get_chat_contacts(bob, bob_chat_id).await?.len(), 2); Ok(()) } @@ -4109,8 +4110,7 @@ async fn test_ignore_outdated_membership_changes() -> Result<()> { let mut tcm = TestContextManager::new(); let alice = &tcm.alice().await; let bob = &tcm.bob().await; - let alice_bob_id = - Contact::create(alice, "", &bob.get_config(Config::Addr).await?.unwrap()).await?; + let alice_bob_id = alice.add_or_lookup_contact_id(bob).await; let alice_chat_id = create_group_chat(alice, ProtectionStatus::Unprotected, "grp").await?; // Alice creates a group chat. Bob accepts it. @@ -4798,13 +4798,14 @@ async fn test_create_group_with_big_msg() -> Result<()> { async fn test_partial_group_consistency() -> Result<()> { let mut tcm = TestContextManager::new(); let alice = tcm.alice().await; - let bob_id = Contact::create(&alice, "", "bob@example.net").await?; + let bob = tcm.bob().await; + let fiona = tcm.fiona().await; + let bob_id = alice.add_or_lookup_contact_id(&bob).await; let alice_chat_id = create_group_chat(&alice, ProtectionStatus::Unprotected, "foos").await?; add_contact_to_chat(&alice, alice_chat_id, bob_id).await?; send_text_msg(&alice, alice_chat_id, "populate".to_string()).await?; let add = alice.pop_sent_msg().await; - let bob = tcm.bob().await; bob.recv_msg(&add).await; let bob_chat_id = bob.get_last_msg().await.chat_id; let contacts = get_chat_contacts(&bob, bob_chat_id).await?; @@ -4839,7 +4840,7 @@ Chat-Group-Member-Added: charlie@example.com", add_contact_to_chat( &alice, alice_chat_id, - Contact::create(&alice, "fiona", "fiona@example.net").await?, + alice.add_or_lookup_contact_id(&fiona).await, ) .await?; @@ -5410,14 +5411,16 @@ Hello!" #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_rename_chat_on_missing_message() -> Result<()> { - let alice = TestContext::new_alice().await; - let bob = TestContext::new_bob().await; + let mut tcm = TestContextManager::new(); + let alice = tcm.alice().await; + let bob = tcm.bob().await; + let charlie = tcm.charlie().await; let chat_id = create_group_chat(&alice, ProtectionStatus::Unprotected, "Group").await?; add_to_chat_contacts_table( &alice, time(), chat_id, - &[Contact::create(&alice, "bob", "bob@example.net").await?], + &[alice.add_or_lookup_contact_id(&bob).await], ) .await?; send_text_msg(&alice, chat_id, "populate".to_string()).await?; @@ -5431,8 +5434,8 @@ async fn test_rename_chat_on_missing_message() -> Result<()> { bob.pop_sent_msg().await; // Bob adds a new member. - let bob_orange = Contact::create(&bob, "orange", "orange@example.net").await?; - add_contact_to_chat(&bob, bob_chat_id, bob_orange).await?; + let bob_charlie = bob.add_or_lookup_contact_id(&charlie).await; + add_contact_to_chat(&bob, bob_chat_id, bob_charlie).await?; let add_msg = bob.pop_sent_msg().await; // Alice only receives the member addition. diff --git a/src/test_utils.rs b/src/test_utils.rs index 5fe5ab860..7dc4b4942 100644 --- a/src/test_utils.rs +++ b/src/test_utils.rs @@ -81,6 +81,14 @@ impl TestContextManager { .await } + pub async fn charlie(&mut self) -> TestContext { + TestContext::builder() + .configure_charlie() + .with_log_sink(self.log_sink.clone()) + .build() + .await + } + pub async fn fiona(&mut self) -> TestContext { TestContext::builder() .configure_fiona() @@ -239,6 +247,13 @@ impl TestContextBuilder { self.with_key_pair(bob_keypair()) } + /// Configures as charlie@example.net with fixed secret key. + /// + /// This is a shortcut for `.with_key_pair(fiona_keypair())`. + pub fn configure_charlie(self) -> Self { + self.with_key_pair(charlie_keypair()) + } + /// Configures as fiona@example.net with fixed secret key. /// /// This is a shortcut for `.with_key_pair(fiona_keypair())`. @@ -682,7 +697,7 @@ impl TestContext { } /// Returns the [`ContactId`] for the other [`TestContext`], creating a contact if necessary. - pub async fn add_or_lookup_contact_id(&self, other: &TestContext) -> ContactId { + pub async fn add_or_lookup_email_contact_id(&self, other: &TestContext) -> ContactId { let primary_self_addr = other.ctx.get_primary_self_addr().await.unwrap(); let addr = ContactAddress::new(&primary_self_addr).unwrap(); // MailinglistAddress is the lowest allowed origin, we'd prefer to not modify the @@ -701,17 +716,22 @@ impl TestContext { /// Returns the [`Contact`] for the other [`TestContext`], creating it if necessary. pub async fn add_or_lookup_email_contact(&self, other: &TestContext) -> Contact { - let contact_id = self.add_or_lookup_contact_id(other).await; + let contact_id = self.add_or_lookup_email_contact_id(other).await; Contact::get_by_id(&self.ctx, contact_id).await.unwrap() } + /// Returns the [`ContactId`] for the other [`TestContext`], creating it if necessary. + pub async fn add_or_lookup_contact_id(&self, other: &TestContext) -> ContactId { + let vcard = make_vcard(other, &[ContactId::SELF]).await.unwrap(); + let contact_ids = import_vcard(self, &vcard).await.unwrap(); + assert_eq!(contact_ids.len(), 1); + *contact_ids.first().unwrap() + } + /// Returns the [`Contact`] for the other [`TestContext`], creating it if necessary. pub async fn add_or_lookup_contact(&self, other: &TestContext) -> Contact { - let vcard = make_vcard(other, &[ContactId::SELF]).await.unwrap(); - let contact_ids = import_vcard(self, &vcard).await.unwrap(); - assert_eq!(contact_ids.len(), 1); - let contact_id = contact_ids.first().unwrap(); - Contact::get_by_id(&self.ctx, *contact_id).await.unwrap() + let contact_id = self.add_or_lookup_contact_id(other).await; + Contact::get_by_id(&self.ctx, contact_id).await.unwrap() } /// Returns 1:1 [`Chat`] with another account. Panics if it doesn't exist. @@ -1113,6 +1133,21 @@ pub fn bob_keypair() -> KeyPair { KeyPair { public, secret } } +/// Load a pre-generated keypair for charlie@example.net from disk. +/// +/// Like [alice_keypair] but a different key and identity. +pub fn charlie_keypair() -> KeyPair { + let public = + key::SignedPublicKey::from_asc(include_str!("../test-data/key/charlie-public.asc")) + .unwrap() + .0; + let secret = + key::SignedSecretKey::from_asc(include_str!("../test-data/key/charlie-secret.asc")) + .unwrap() + .0; + KeyPair { public, secret } +} + /// Load a pre-generated keypair for fiona@example.net from disk. /// /// Like [alice_keypair] but a different key and identity. diff --git a/src/webxdc/webxdc_tests.rs b/src/webxdc/webxdc_tests.rs index 1d0e92492..61ec08399 100644 --- a/src/webxdc/webxdc_tests.rs +++ b/src/webxdc/webxdc_tests.rs @@ -192,9 +192,10 @@ async fn test_forward_webxdc_instance() -> Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_resend_webxdc_instance_and_info() -> Result<()> { let mut tcm = TestContextManager::new(); + let alice = tcm.alice().await; + let bob = tcm.bob().await; // Alice uses webxdc in a group - let alice = tcm.alice().await; alice.set_config_bool(Config::BccSelf, false).await?; let alice_grp = create_group_chat(&alice, ProtectionStatus::Unprotected, "grp").await?; let alice_instance = send_webxdc_instance(&alice, alice_grp).await?; @@ -212,7 +213,7 @@ async fn test_resend_webxdc_instance_and_info() -> Result<()> { add_contact_to_chat( &alice, alice_grp, - Contact::create(&alice, "", "bob@example.net").await?, + alice.add_or_lookup_contact_id(&bob).await, ) .await?; assert_eq!(alice_grp.get_msg_cnt(&alice).await?, 3); @@ -222,7 +223,6 @@ async fn test_resend_webxdc_instance_and_info() -> Result<()> { let sent2 = alice.pop_sent_msg().await; // Bob receives webxdc, legacy info-messages updates are received and added to the chat. - let bob = tcm.bob().await; let bob_instance = bob.recv_msg(&sent1).await; bob.recv_msg_trash(&sent2).await; assert_eq!(bob_instance.viewtype, Viewtype::Webxdc); diff --git a/test-data/golden/chat_test_parallel_member_remove b/test-data/golden/chat_test_parallel_member_remove index 86e099857..b548b3e00 100644 --- a/test-data/golden/chat_test_parallel_member_remove +++ b/test-data/golden/chat_test_parallel_member_remove @@ -1,7 +1,7 @@ Group#Chat#10: Group chat [3 member(s)] -------------------------------------------------------------------------------- -Msg#10: (Contact#Contact#10): Hi! I created a group. [FRESH] -Msg#11: Me (Contact#Contact#Self): You left the group. [INFO] √ -Msg#12: (Contact#Contact#10): Member claire@example.net added by alice@example.org. [FRESH][INFO] -Msg#13: (Contact#Contact#10): What a silence! [FRESH] +Msg#10🔒: (Contact#Contact#10): Hi! I created a group. [FRESH] +Msg#11🔒: Me (Contact#Contact#Self): You left the group. [INFO] √ +Msg#12🔒: (Contact#Contact#10): Member charlie@example.net added by alice@example.org. [FRESH][INFO] +Msg#13🔒: (Contact#Contact#10): What a silence! [FRESH] --------------------------------------------------------------------------------