Try clearing Client's state at the ends of integration tests

Max Brunsfeld and Nathan Sobo created

Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

crates/client/src/client.rs | 9 +++++++++
crates/server/src/rpc.rs    | 6 ++++++
2 files changed, 15 insertions(+)

Detailed changes

crates/client/src/client.rs 🔗

@@ -228,6 +228,15 @@ impl Client {
         self.http.clone()
     }
 
+    #[cfg(any(test, feature = "test-support"))]
+    pub fn tear_down(&self) {
+        let mut state = self.state.write();
+        state.message_handlers.clear();
+        state.models_by_message_type.clear();
+        state.models_by_entity_type_and_remote_id.clear();
+        state.entity_id_extractors.clear();
+    }
+
     #[cfg(any(test, feature = "test-support"))]
     pub fn override_authenticate<F>(&mut self, authenticate: F) -> &mut Self
     where

crates/server/src/rpc.rs 🔗

@@ -5052,6 +5052,12 @@ mod tests {
         }
     }
 
+    impl Drop for TestClient {
+        fn drop(&mut self) {
+            self.client.tear_down();
+        }
+    }
+
     impl Executor for Arc<gpui::executor::Background> {
         fn spawn_detached<F: 'static + Send + Future<Output = ()>>(&self, future: F) {
             self.spawn(future).detach();