diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/headless.rs | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/src/server/headless.rs b/src/server/headless.rs index 942a17f1..99702512 100644 --- a/src/server/headless.rs +++ b/src/server/headless.rs @@ -2272,10 +2272,7 @@ impl HeadlessServer { true } - _ => { - self.app.handle_internal_event(ev); - true - } + _ => self.app.handle_internal_event_with_render_impact(ev), } } @@ -5584,6 +5581,61 @@ next_tab = "" } #[test] + fn unchanged_git_refresh_does_not_request_headless_render() { + let mut server = test_headless_server(); + server.app.git_refresh_in_flight = true; + let mut workspace = crate::workspace::Workspace::test_new("one"); + let workspace_id = workspace.id.clone(); + let cwd = workspace.identity_cwd.clone(); + workspace.cached_auto_label = "cached".into(); + workspace.cached_git_status_key = cwd.clone(); + workspace.cached_git_branch = None; + server.app.state.workspaces.push(workspace); + + let changed = server.handle_internal_event_with_forwarding(AppEvent::GitStatusRefreshed { + results: vec![crate::workspace::WorkspaceGitStatus { + workspace_id, + resolved_identity_cwd: cwd.clone(), + status_cache_key: cwd, + demand: crate::workspace::GitStatusRefreshDemand::ALL, + auto_label: "cached".into(), + branch: None, + ahead_behind: None, + space: None, + }], + cache_updates: Vec::new(), + }); + + assert!(!changed); + assert!(!server.app.git_refresh_in_flight); + } + + #[test] + fn changed_git_refresh_requests_headless_render() { + let mut server = test_headless_server(); + let workspace = crate::workspace::Workspace::test_new("one"); + let workspace_id = workspace.id.clone(); + let cwd = workspace.identity_cwd.clone(); + server.app.state.workspaces.push(workspace); + + let changed = server.handle_internal_event_with_forwarding(AppEvent::GitStatusRefreshed { + results: vec![crate::workspace::WorkspaceGitStatus { + workspace_id, + resolved_identity_cwd: cwd.clone(), + status_cache_key: cwd, + demand: crate::workspace::GitStatusRefreshDemand::ALL, + auto_label: "one".into(), + branch: Some("changed".into()), + ahead_behind: None, + space: None, + }], + cache_updates: Vec::new(), + }); + + assert!(changed); + } + + #[test] fn terminal_attach_client_exits_when_attached_pane_dies() { let mut server = test_headless_server(); let workspace = crate::workspace::Workspace::test_new("attached"); |
