diff --git a/e2e/install.spec.ts b/e2e/install.spec.ts index bb9c4306..08fb76b8 100644 --- a/e2e/install.spec.ts +++ b/e2e/install.spec.ts @@ -140,4 +140,13 @@ test('dataURL の差し替えとパッケージのインストール・アンイ ); expect(existsSync(path.join(installationPath, 'dummy.auf'))).toBe(false); await expect(row).not.toContainText('インストール済み'); + + // 未インストールのまま押しても、何が起きたのか分かる文言が出る + // (修正前は何も消していないのに「アンインストール完了」と出ていた) + await row.click(); + await window.locator('#uninstall-package').click(); + await expect(window.locator('#uninstall-package')).toHaveText( + 'インストールされていません。', + { timeout: 30_000 }, + ); }); diff --git a/src/renderer/main/packages/PackageActions.tsx b/src/renderer/main/packages/PackageActions.tsx index 01a80040..e9241884 100644 --- a/src/renderer/main/packages/PackageActions.tsx +++ b/src/renderer/main/packages/PackageActions.tsx @@ -268,6 +268,18 @@ function PackageActions({ const uninstalledPackage = { ...selectedEntry.p }; + // 未インストールのまま押せてしまい、しかも main 側は成功を返す。 + // 実測すると「アンインストール完了」と出る — 何も消していないのに + // 完了と報告している(#2456 と同じ種類)。 + // 無効化ではなく説明を出すのは、このボタン群が「押したら理由を言う」 + // 方式で揃っているため(選択なし・インストール先未設定も同じ形)。 + // notInstalled だけを弾く。手動インストール済みは記録に無いだけで + // ファイルは在るので、消す操作に意味がある + if (uninstalledPackage.installationStatus === states.notInstalled) { + uninstall.finish('インストールされていません。', 'danger'); + return; + } + let result: Awaited< ReturnType >;