diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-31 21:18:40 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-31 21:18:40 +0300 |
| commit | 8cf0e9b35b00f9dd91270fcd3931015d61ffd8a0 (patch) | |
| tree | 2b76b158344fdbe0de17c6abe98564a262266d2f /src/app/mod.rs | |
| parent | 859185b491c5a80e888ba8f9dd213d2c35baa034 (diff) | |
fix: confirm implicit worktree group close
refs #369
Diffstat (limited to 'src/app/mod.rs')
| -rw-r--r-- | src/app/mod.rs | 41 |
1 files changed, 41 insertions, 0 deletions
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 @@ -2889,6 +2889,47 @@ mod tests { } #[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(); app.no_session = false; |
