Uncomment randomized tests for contacts

Antonio Scandurra created

Change summary

crates/collab/src/rpc.rs | 72 ++++++++++++++++++++++++++---------------
1 file changed, 45 insertions(+), 27 deletions(-)

Detailed changes

crates/collab/src/rpc.rs 🔗

@@ -5928,16 +5928,23 @@ mod tests {
                     if let Some(guest_err) = guest_err {
                         log::error!("{} error - {:?}", guest.username, guest_err);
                     }
-                    // TODO
-                    // let contacts = server
-                    //     .store
-                    //     .read()
-                    //     .await
-                    //     .contacts_for_user(guest.current_user_id(&guest_cx));
-                    // assert!(!contacts
-                    //     .iter()
-                    //     .flat_map(|contact| &contact.projects)
-                    //     .any(|project| project.id == host_project_id));
+
+                    let contacts = server
+                        .app_state
+                        .db
+                        .get_contacts(guest.current_user_id(&guest_cx))
+                        .await
+                        .unwrap();
+                    let contacts = server
+                        .store
+                        .read()
+                        .await
+                        .build_initial_contacts_update(contacts)
+                        .contacts;
+                    assert!(!contacts
+                        .iter()
+                        .flat_map(|contact| &contact.projects)
+                        .any(|project| project.id == host_project_id));
                     guest
                         .project
                         .as_ref()
@@ -5997,9 +6004,12 @@ mod tests {
                     let removed_guest_id = user_ids.remove(guest_ix);
                     let guest = clients.remove(guest_ix);
                     op_start_signals.remove(guest_ix);
+                    server.forbid_connections();
                     server.disconnect_client(removed_guest_id);
                     cx.foreground().advance_clock(RECEIVE_TIMEOUT);
                     let (guest, mut guest_cx, guest_err) = guest.await;
+                    server.allow_connections();
+
                     if let Some(guest_err) = guest_err {
                         log::error!("{} error - {:?}", guest.username, guest_err);
                     }
@@ -6008,23 +6018,31 @@ mod tests {
                         .as_ref()
                         .unwrap()
                         .read_with(&guest_cx, |project, _| assert!(project.is_read_only()));
-                    // TODO
-                    // for user_id in &user_ids {
-                    //     for contact in server.store.read().await.contacts_for_user(*user_id) {
-                    //         assert_ne!(
-                    //             contact.user_id, removed_guest_id.0 as u64,
-                    //             "removed guest is still a contact of another peer"
-                    //         );
-                    //         for project in contact.projects {
-                    //             for project_guest_id in project.guests {
-                    //                 assert_ne!(
-                    //                     project_guest_id, removed_guest_id.0 as u64,
-                    //                     "removed guest appears as still participating on a project"
-                    //                 );
-                    //             }
-                    //         }
-                    //     }
-                    // }
+                    for user_id in &user_ids {
+                        let contacts = server.app_state.db.get_contacts(*user_id).await.unwrap();
+                        let contacts = server
+                            .store
+                            .read()
+                            .await
+                            .build_initial_contacts_update(contacts)
+                            .contacts;
+                        for contact in contacts {
+                            if contact.online {
+                                assert_ne!(
+                                    contact.user_id, removed_guest_id.0 as u64,
+                                    "removed guest is still a contact of another peer"
+                                );
+                            }
+                            for project in contact.projects {
+                                for project_guest_id in project.guests {
+                                    assert_ne!(
+                                        project_guest_id, removed_guest_id.0 as u64,
+                                        "removed guest appears as still participating on a project"
+                                    );
+                                }
+                            }
+                        }
+                    }
 
                     log::info!("{} removed", guest.username);
                     available_guests.push(guest.username.clone());