From 5bc481112eccfe187103f1b504ff28b401cdb44f Mon Sep 17 00:00:00 2001 From: Mikayla Date: Wed, 16 Aug 2023 20:05:21 -0700 Subject: [PATCH] Add test for lost channel update --- crates/collab/src/tests/channel_tests.rs | 97 +++++++++++++++++++++++- 1 file changed, 93 insertions(+), 4 deletions(-) diff --git a/crates/collab/src/tests/channel_tests.rs b/crates/collab/src/tests/channel_tests.rs index a250f59a21..06cf3607c0 100644 --- a/crates/collab/src/tests/channel_tests.rs +++ b/crates/collab/src/tests/channel_tests.rs @@ -776,11 +776,100 @@ async fn test_lost_channel_creation( cx_a: &mut TestAppContext, cx_b: &mut TestAppContext, ) { + deterministic.forbid_parking(); + let mut server = TestServer::start(&deterministic).await; + let client_a = server.create_client(cx_a, "user_a").await; + let client_b = server.create_client(cx_b, "user_b").await; + + server + .make_contacts(&mut [(&client_a, cx_a), (&client_b, cx_b)]) + .await; + + let channel_id = server.make_channel("x", (&client_a, cx_a), &mut []).await; + // Invite a member - // Create a new sub channel - // Member accepts invite - // Make sure that member can see new channel - todo!(); + client_a + .channel_store() + .update(cx_a, |channel_store, cx| { + channel_store.invite_member(channel_id, client_b.user_id().unwrap(), false, cx) + }) + .await + .unwrap(); + + deterministic.run_until_parked(); + + // Sanity check + assert_channel_invitations( + client_b.channel_store(), + cx_b, + &[ExpectedChannel { + depth: 0, + id: channel_id, + name: "x".to_string(), + user_is_admin: false, + }], + ); + + let subchannel_id = client_a + .channel_store() + .update(cx_a, |channel_store, cx| { + channel_store.create_channel("subchannel", Some(channel_id), cx) + }) + .await + .unwrap(); + + deterministic.run_until_parked(); + + // Make sure A sees their new channel + assert_channels( + client_a.channel_store(), + cx_a, + &[ + ExpectedChannel { + depth: 0, + id: channel_id, + name: "x".to_string(), + user_is_admin: true, + }, + ExpectedChannel { + depth: 1, + id: subchannel_id, + name: "subchannel".to_string(), + user_is_admin: true, + }, + ], + ); + + // Accept the invite + client_b + .channel_store() + .update(cx_b, |channel_store, _| { + channel_store.respond_to_channel_invite(channel_id, true) + }) + .await + .unwrap(); + + deterministic.run_until_parked(); + + // B should now see the channel + assert_channels( + client_b.channel_store(), + cx_b, + &[ + ExpectedChannel { + depth: 0, + id: channel_id, + name: "x".to_string(), + user_is_admin: false, + }, + ExpectedChannel { + depth: 1, + id: subchannel_id, + name: "subchannel".to_string(), + user_is_admin: false, + }, + ], + ); } #[derive(Debug, PartialEq)]