From f2210b009e4aecef880aaf08d2adf3e52b92cd76 Mon Sep 17 00:00:00 2001 From: Jasper Hugo Date: Fri, 9 Oct 2026 09:38:51 +0200 Subject: [PATCH] test: preserve empty selections against configured extension defaults --- crates/goose/src/acp/server.rs | 14 ++++- crates/goose/src/session/extension_data.rs | 52 +++++++++++++++++++ .../src/__tests__/createSession.test.ts | 5 +- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/crates/goose/src/acp/server.rs b/crates/goose/src/acp/server.rs index af2366333a..b127a4c510 100644 --- a/crates/goose/src/acp/server.rs +++ b/crates/goose/src/acp/server.rs @@ -2925,7 +2925,9 @@ extensions: #[test] fn empty_recipe_extensions_do_not_override_explicit_empty_extensions() { - let (config, _c, _s) = config_with_yaml(""); + let (config, _c, _s) = config_with_yaml( + "extensions:\n developer:\n enabled: true\n type: builtin\n name: developer\n", + ); let project_root = tempfile::tempdir().unwrap(); let extensions = initial_session_extensions( &config, @@ -2937,6 +2939,16 @@ extensions: ) .unwrap(); assert!(extensions.is_empty()); + let defaults = initial_session_extensions( + &config, + &default_builtin("developer"), + project_root.path(), + vec![], + None, + Some(&[]), + ) + .unwrap(); + assert!(has_developer(&defaults)); } #[test] diff --git a/crates/goose/src/session/extension_data.rs b/crates/goose/src/session/extension_data.rs index fe230822ec..befacaa009 100644 --- a/crates/goose/src/session/extension_data.rs +++ b/crates/goose/src/session/extension_data.rs @@ -204,6 +204,17 @@ mod tests { expected: Option>, ) { let config = test_config(); + config + .set_param( + "extensions", + json!({"developer": {"enabled": true, "type": "builtin", "name": "developer", "description": "dev"}}), + ) + .unwrap(); + assert!( + crate::config::extensions::get_enabled_extensions_with_config(&config) + .iter() + .any(|extension| extension.name() == "developer"), + ); let expected = expected.unwrap_or_else(|| { crate::config::extensions::get_enabled_extensions_with_config(&config) }); @@ -213,6 +224,47 @@ mod tests { ); } + #[tokio::test] + async fn persisted_empty_extensions_override_configured_defaults() { + let config = test_config(); + config + .set_param( + "extensions", + json!({"developer": {"enabled": true, "type": "builtin", "name": "developer", "description": "dev"}}), + ) + .unwrap(); + let defaults = crate::config::extensions::get_enabled_extensions_with_config(&config); + assert!(defaults + .iter() + .any(|extension| extension.name() == "developer")); + let directory = tempfile::tempdir().unwrap(); + let manager = SessionManager::new(directory.path().to_path_buf()); + let session = manager + .create_session( + directory.path().to_path_buf(), + "extension selection".to_string(), + crate::session::SessionType::User, + crate::config::GooseMode::default(), + ) + .await + .unwrap(); + assert_eq!( + EnabledExtensionsState::for_session(&manager, &session.id, &config).await, + defaults, + ); + manager + .update(&session.id) + .extension_data(extension_data_with(vec![])) + .apply() + .await + .unwrap(); + assert!( + EnabledExtensionsState::for_session(&manager, &session.id, &config) + .await + .is_empty() + ); + } + #[test] fn test_extension_data_basic_operations() { let mut extension_data = ExtensionData::new(); diff --git a/ui/desktop/src/__tests__/createSession.test.ts b/ui/desktop/src/__tests__/createSession.test.ts index c342c3c7ed..25bb466721 100644 --- a/ui/desktop/src/__tests__/createSession.test.ts +++ b/ui/desktop/src/__tests__/createSession.test.ts @@ -47,7 +47,10 @@ vi.mock('../acp/capabilities', () => ({ getAcpFeatureCapabilities: vi.fn(), })); -const testRecipe = vi.hoisted(() => ({ title: 'Test recipe', description: 'Recipe used in tests' })); +const testRecipe = vi.hoisted(() => ({ + title: 'Test recipe', + description: 'Recipe used in tests', +})); const testSession: Session = { id: 'session-1',