fix(hello-plugin): prévient le crash de l'asset protocol dans le runtime Tauri

- Ajoute block_on_protocol_future() pour éviter l'erreur 'Cannot start a runtime from within a runtime'
- Ajoute test unitaire pour vérifier la compatibilité avec le runtime Tauri
- Ajoute test d'intégration pour le hello-plugin du SDK
This commit is contained in:
2026-07-31 13:17:59 +02:00
parent f81b385616
commit fe5fe7cb70
2 changed files with 77 additions and 1 deletions

View File

@ -33,6 +33,12 @@ fn fixture_path(name: &str) -> PathBuf {
.join(name)
}
fn sdk_hello_plugin_path() -> PathBuf {
Path::new(env!("CARGO_MANIFEST_DIR"))
.join("../..")
.join("sdk/IdeaSDK/examples/hello-plugin")
}
#[tokio::test]
async fn installs_reference_fixture_and_loads_runtime_catalog() {
let app_data = temp_dir("app-data");
@ -90,3 +96,53 @@ async fn installs_reference_fixture_and_loads_runtime_catalog() {
let _ = fs::remove_dir_all(app_data);
}
#[tokio::test]
async fn installs_sdk_hello_plugin_and_loads_runtime_catalog() {
let app_data = temp_dir("hello-app-data");
let hello_plugin = sdk_hello_plugin_path();
let packages = Arc::new(FsPluginPackageStore::new(&app_data));
let registry = Arc::new(FsPluginRegistryStore::new(&app_data));
let validator = Arc::new(JsonPluginManifestValidator::new("0.3.0"));
let events = Arc::new(TokioBroadcastEventBus::new());
let mcp = Arc::new(ExternalMcpPluginSupervisor::new());
let install = InstallPluginFromDirectory::new(
packages.clone(),
registry.clone(),
validator.clone(),
events,
mcp,
);
let result = install
.execute(hello_plugin.to_string_lossy().into_owned())
.await
.unwrap();
assert_eq!(result.plugin.id, "com.example.hello-plugin");
assert_eq!(result.plugin.display_name, "Hello Plugin");
assert_eq!(result.review.contribution_summary.top_level_menus, 1);
assert_eq!(result.review.contribution_summary.menu_items, 1);
assert!(app_data
.join("plugins/installed/com.example.hello-plugin/dist/index.js")
.is_file());
let catalog = ListPluginRuntimeContributions::new(packages, registry, validator)
.execute()
.await
.unwrap();
assert_eq!(catalog.plugins.len(), 1);
let plugin = &catalog.plugins[0];
assert_eq!(plugin.id, "com.example.hello-plugin");
assert!(plugin
.bundle_url
.starts_with("idea-plugin://com.example.hello-plugin/0.1.0/"));
assert!(plugin.bundle_url.ends_with("/dist/index.js"));
assert_eq!(plugin.contributes.menus[0].id, "hello-plugin.menu");
assert_eq!(
plugin.contributes.menu_items[0].command.as_str(),
"hello-plugin.sayHello"
);
let _ = fs::remove_dir_all(app_data);
}