diff --git a/crates/collab/src/db.rs b/crates/collab/src/db.rs index e4555ed856f5bfbd3fc8a6cc7b63a7b8a1f06599..5e8c45bf87ca435dc439dd16be722bb9479485e6 100644 --- a/crates/collab/src/db.rs +++ b/crates/collab/src/db.rs @@ -486,6 +486,10 @@ impl Db for PostgresDb { worktree_id: u64, extensions: HashMap, ) -> 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::>()), + (101, [ + ("ts".into(), 2), + ("md".into(), 1), + ].into_iter().collect::>()) + ].into_iter().collect()); + } + #[tokio::test(flavor = "multi_thread")] async fn test_project_activity() { let test_db = TestDb::postgres().await;