@@ -166,9 +166,67 @@ async fn test_basic_calls(
}
);
+ // Call user C again from user A.
+ active_call_a
+ .update(cx_a, |call, cx| {
+ call.invite(client_c.user_id().unwrap(), None, cx)
+ })
+ .await
+ .unwrap();
+
+ deterministic.run_until_parked();
+ assert_eq!(
+ room_participants(&room_a, cx_a),
+ RoomParticipants {
+ remote: vec!["user_b".to_string()],
+ pending: vec!["user_c".to_string()]
+ }
+ );
+ assert_eq!(
+ room_participants(&room_b, cx_b),
+ RoomParticipants {
+ remote: vec!["user_a".to_string()],
+ pending: vec!["user_c".to_string()]
+ }
+ );
+
+ // User C accepts the call.
+ let call_c = incoming_call_c.next().await.unwrap().unwrap();
+ assert_eq!(call_c.calling_user.github_login, "user_a");
+ active_call_c
+ .update(cx_c, |call, cx| call.accept_incoming(cx))
+ .await
+ .unwrap();
+ assert!(incoming_call_c.next().await.unwrap().is_none());
+ let room_c = active_call_c.read_with(cx_c, |call, _| call.room().unwrap().clone());
+
+ deterministic.run_until_parked();
+ assert_eq!(
+ room_participants(&room_a, cx_a),
+ RoomParticipants {
+ remote: vec!["user_b".to_string(), "user_c".to_string()],
+ pending: Default::default()
+ }
+ );
+ assert_eq!(
+ room_participants(&room_b, cx_b),
+ RoomParticipants {
+ remote: vec!["user_a".to_string(), "user_c".to_string()],
+ pending: Default::default()
+ }
+ );
+ assert_eq!(
+ room_participants(&room_c, cx_c),
+ RoomParticipants {
+ remote: vec!["user_a".to_string(), "user_b".to_string()],
+ pending: Default::default()
+ }
+ );
+
// User A shares their screen
let display = MacOSDisplay::new();
let events_b = active_call_events(cx_b);
+ let events_c = active_call_events(cx_c);
active_call_a
.update(cx_a, |call, cx| {
call.room().unwrap().update(cx, |room, cx| {
@@ -181,9 +239,10 @@ async fn test_basic_calls(
deterministic.run_until_parked();
+ // User B observes the remote screen sharing track.
assert_eq!(events_b.borrow().len(), 1);
- let event = events_b.borrow().first().unwrap().clone();
- if let call::room::Event::RemoteVideoTracksChanged { participant_id } = event {
+ let event_b = events_b.borrow().first().unwrap().clone();
+ if let call::room::Event::RemoteVideoTracksChanged { participant_id } = event_b {
assert_eq!(participant_id, client_a.peer_id().unwrap());
room_b.read_with(cx_b, |room, _| {
assert_eq!(
@@ -197,6 +256,23 @@ async fn test_basic_calls(
panic!("unexpected event")
}
+ // User C observes the remote screen sharing track.
+ assert_eq!(events_c.borrow().len(), 1);
+ let event_c = events_c.borrow().first().unwrap().clone();
+ if let call::room::Event::RemoteVideoTracksChanged { participant_id } = event_c {
+ assert_eq!(participant_id, client_a.peer_id().unwrap());
+ room_c.read_with(cx_c, |room, _| {
+ assert_eq!(
+ room.remote_participants()[&client_a.user_id().unwrap()]
+ .tracks
+ .len(),
+ 1
+ );
+ });
+ } else {
+ panic!("unexpected event")
+ }
+
// User A leaves the room.
active_call_a.update(cx_a, |call, cx| {
call.hang_up(cx).unwrap();
@@ -213,18 +289,28 @@ async fn test_basic_calls(
assert_eq!(
room_participants(&room_b, cx_b),
RoomParticipants {
- remote: Default::default(),
+ remote: vec!["user_c".to_string()],
+ pending: Default::default()
+ }
+ );
+ assert_eq!(
+ room_participants(&room_c, cx_c),
+ RoomParticipants {
+ remote: vec!["user_b".to_string()],
pending: Default::default()
}
);
// User B gets disconnected from the LiveKit server, which causes them
- // to automatically leave the room.
+ // to automatically leave the room. User C leaves the room as well because
+ // nobody else is in there.
server
.test_live_kit_server
- .disconnect_client(client_b.peer_id().unwrap().to_string())
+ .disconnect_client(client_b.user_id().unwrap().to_string())
.await;
- active_call_b.update(cx_b, |call, _| assert!(call.room().is_none()));
+ deterministic.run_until_parked();
+ active_call_b.read_with(cx_b, |call, _| assert!(call.room().is_none()));
+ active_call_c.read_with(cx_c, |call, _| assert!(call.room().is_none()));
assert_eq!(
room_participants(&room_a, cx_a),
RoomParticipants {
@@ -239,6 +325,13 @@ async fn test_basic_calls(
pending: Default::default()
}
);
+ assert_eq!(
+ room_participants(&room_c, cx_c),
+ RoomParticipants {
+ remote: Default::default(),
+ pending: Default::default()
+ }
+ );
}
#[gpui::test(iterations = 10)]
@@ -2572,7 +2665,7 @@ async fn test_fs_operations(
.await
.unwrap();
deterministic.run_until_parked();
-
+
worktree_a.read_with(cx_a, |worktree, _| {
assert_eq!(
worktree