From 8cf0e9b35b00f9dd91270fcd3931015d61ffd8a0 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sun, 31 May 2026 21:18:40 +0300 Subject: fix: confirm implicit worktree group close refs #369 --- src/app/mod.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/app/mod.rs') diff --git a/src/app/mod.rs b/src/app/mod.rs index 11931e51..661926ee 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -2888,6 +2888,47 @@ mod tests { assert!(app.state.workspaces.is_empty()); } + #[test] + fn pane_close_request_requires_confirmation_before_closing_parent_worktree_group() { + let mut app = test_app(); + let mut parent = Workspace::test_new("api-pane-close-parent"); + parent.worktree_space = Some(crate::workspace::WorktreeSpaceMembership { + key: "repo-key".into(), + label: "herdr".into(), + repo_root: "/repo/herdr".into(), + checkout_path: "/repo/herdr".into(), + is_linked_worktree: false, + }); + let mut child = Workspace::test_new("api-pane-close-child"); + child.worktree_space = Some(crate::workspace::WorktreeSpaceMembership { + key: "repo-key".into(), + label: "herdr".into(), + repo_root: "/repo/herdr".into(), + checkout_path: "/repo/herdr-child".into(), + is_linked_worktree: true, + }); + app.state.workspaces = vec![parent, child]; + app.state.ensure_test_terminals(); + app.state.active = Some(0); + app.state.selected = 1; + + let target_pane = app.state.workspaces[0].tabs[0].root_pane; + let target_pane_id = app.pane_info(0, target_pane).unwrap().pane_id; + + let response = app.handle_api_request(crate::api::schema::Request { + id: "req_pane_close_parent_group".into(), + method: crate::api::schema::Method::PaneClose(crate::api::schema::PaneTarget { + pane_id: target_pane_id, + }), + }); + let response: serde_json::Value = serde_json::from_str(&response).unwrap(); + + assert_eq!(response["error"]["code"], "confirmation_required"); + assert_eq!(app.state.mode, Mode::ConfirmClose); + assert_eq!(app.state.selected, 0); + assert_eq!(app.state.workspaces.len(), 2); + } + #[test] fn session_dirty_flag_schedules_debounced_save() { let mut app = test_app(); -- cgit v1.2.3