Merge pull request #1214 from zed-industries/fix-error-on-empty-worktree-update

Antonio Scandurra created

Fix error when worktree has no file extensions

Change summary

crates/collab/src/db.rs | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)

Detailed changes

crates/collab/src/db.rs 🔗

@@ -486,6 +486,10 @@ impl Db for PostgresDb {
         worktree_id: u64,
         extensions: HashMap<String, usize>,
     ) -> Result<()> {
+        if extensions.is_empty() {
+            return Ok(());
+        }
+
         let mut query = QueryBuilder::new(
             "INSERT INTO worktree_extensions (project_id, worktree_id, extension, count)",
         );
@@ -1351,6 +1355,31 @@ pub mod tests {
         assert_ne!(invite_code_4, invite_code_3);
     }
 
+    #[tokio::test(flavor = "multi_thread")]
+    async fn test_worktree_extensions() {
+        let test_db = TestDb::postgres().await;
+        let db = test_db.db();
+
+        let user = db.create_user("user_1", None, false).await.unwrap();
+        let project = db.register_project(user).await.unwrap();
+
+        db.update_worktree_extensions(project, 100, Default::default()).await.unwrap();
+        db.update_worktree_extensions(project, 100, [("rs".to_string(), 5), ("md".to_string(), 3)].into_iter().collect()).await.unwrap();
+        db.update_worktree_extensions(project, 100, [("rs".to_string(), 6), ("md".to_string(), 5)].into_iter().collect()).await.unwrap();
+        db.update_worktree_extensions(project, 101, [("ts".to_string(), 2), ("md".to_string(), 1)].into_iter().collect()).await.unwrap();
+
+        assert_eq!(db.get_project_extensions(project).await.unwrap(), [
+            (100, [
+                ("rs".into(), 6),
+                ("md".into(), 5),
+            ].into_iter().collect::<HashMap<_, _>>()),
+            (101, [
+                ("ts".into(), 2),
+                ("md".into(), 1),
+            ].into_iter().collect::<HashMap<_, _>>())
+        ].into_iter().collect());
+    }
+
     #[tokio::test(flavor = "multi_thread")]
     async fn test_project_activity() {
         let test_db = TestDb::postgres().await;