diff --git a/crates/engine/src/plugins.rs b/crates/engine/src/plugins.rs index 0159a924..18fd64ef 100644 --- a/crates/engine/src/plugins.rs +++ b/crates/engine/src/plugins.rs @@ -393,6 +393,7 @@ pub(crate) fn register(s: &mut Session, entry: InstalledPlugin, wasm: Vec) - match list.iter_mut().find(|x| x.manifest.id == id) { Some(slot) => { *slot = entry; + s.prefs.plugin_settings.remove(&id); true } None => { diff --git a/crates/engine/src/plugins_tests.rs b/crates/engine/src/plugins_tests.rs index 51c997a5..172fd477 100644 --- a/crates/engine/src/plugins_tests.rs +++ b/crates/engine/src/plugins_tests.rs @@ -406,3 +406,13 @@ fn a_full_undo_history_keeps_its_steps_and_tampered_manifests_are_refused() { s.prefs.plugins[0].manifest.main = "../../elsewhere.wasm".into(); assert!(matches!(s.execute("plugin.run", &json!({"id": "org.test.many"})), Err(EngineError::BadParams { .. }))); } + +#[test] +fn reinstalling_under_an_existing_id_drops_the_old_settings() { + let mut s = Session::new(); + let m = manifest("org.test.reuse", "read", &[]); + install(&mut s, m.clone(), &script(&[], OnRefusal::Fail, "")); + s.prefs.plugin_settings.entry("org.test.reuse".into()).or_default().insert("key".into(), json!("v")); + install(&mut s, m, &script(&[], OnRefusal::Fail, "")); + assert!(!s.prefs.plugin_settings.contains_key("org.test.reuse"), "{:?}", s.prefs.plugin_settings); +}