test: preserve empty selections against configured extension defaults

This commit is contained in:
Jasper Hugo 2026-10-09 09:38:51 +02:00
parent a7a88f0453
commit f2210b009e
3 changed files with 69 additions and 2 deletions

View file

@ -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]

View file

@ -204,6 +204,17 @@ mod tests {
expected: Option<Vec<ExtensionConfig>>,
) {
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();

View file

@ -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',