diff --git a/src/renderer/components/+extensions/__tests__/extensions.test.tsx b/src/renderer/components/+extensions/__tests__/extensions.test.tsx index 5aee03bb6e..40a523d8a3 100644 --- a/src/renderer/components/+extensions/__tests__/extensions.test.tsx +++ b/src/renderer/components/+extensions/__tests__/extensions.test.tsx @@ -88,9 +88,13 @@ describe("Extensions", () => { ExtensionDiscovery.getInstance().isLoaded = true; const res = render(<>); + const table = res.getByTestId("extensions-table"); + const menuTrigger = table.querySelector("div[role=row]:first-of-type .actions .Icon"); - expect(res.getByText("Disable").closest("button")).not.toBeDisabled(); - expect(res.getByText("Uninstall").closest("button")).not.toBeDisabled(); + fireEvent.click(menuTrigger); + + expect(res.getByText("Disable")).toHaveAttribute("aria-disabled", "false"); + expect(res.getByText("Uninstall")).toHaveAttribute("aria-disabled", "false"); fireEvent.click(res.getByText("Uninstall")); @@ -99,8 +103,9 @@ describe("Extensions", () => { await waitFor(() => { expect(ExtensionDiscovery.getInstance().uninstallExtension).toHaveBeenCalled(); - expect(res.getByText("Disable").closest("button")).toBeDisabled(); - expect(res.getByText("Uninstall").closest("button")).toBeDisabled(); + fireEvent.click(menuTrigger); + expect(res.getByText("Disable")).toHaveAttribute("aria-disabled", "true"); + expect(res.getByText("Uninstall")).toHaveAttribute("aria-disabled", "true"); }, { timeout: 30000, }); @@ -111,7 +116,7 @@ describe("Extensions", () => { (fse.unlink as jest.MockedFunction).mockReturnValue(Promise.resolve() as any); - fireEvent.change(res.getByPlaceholderText("Path or URL to an extension package", { + fireEvent.change(res.getByPlaceholderText("File path or URL", { exact: false }), { target: { @@ -134,8 +139,6 @@ describe("Extensions", () => { ExtensionDiscovery.getInstance().isLoaded = true; const { container } = render(); - waitFor(() => - expect(container.querySelector(".Spinner")).not.toBeInTheDocument() - ); + expect(container.querySelector(".Spinner")).not.toBeInTheDocument(); }); }); diff --git a/src/renderer/components/+extensions/extension-install.store.ts b/src/renderer/components/+extensions/extension-install.store.ts index fc556c068a..32bdb21f56 100644 --- a/src/renderer/components/+extensions/extension-install.store.ts +++ b/src/renderer/components/+extensions/extension-install.store.ts @@ -209,6 +209,13 @@ export class ExtensionInstallationStateStore { return ExtensionInstallationStateStore.InstallingExtensions.size; } + /** + * The current number of extensions uninstalling + */ + @computed static get uninstalling(): number { + return ExtensionInstallationStateStore.UninstallingExtensions.size; + } + /** * If there is at least one extension currently installing */ @@ -216,6 +223,13 @@ export class ExtensionInstallationStateStore { return ExtensionInstallationStateStore.installing > 0; } + /** + * If there is at least one extension currently ininstalling + */ + @computed static get anyUninstalling(): boolean { + return ExtensionInstallationStateStore.uninstalling > 0; + } + /** * The current number of extensions preinstalling */ diff --git a/src/renderer/components/+extensions/installed-extensions.tsx b/src/renderer/components/+extensions/installed-extensions.tsx index d266243c0f..a2fb3f290f 100644 --- a/src/renderer/components/+extensions/installed-extensions.tsx +++ b/src/renderer/components/+extensions/installed-extensions.tsx @@ -109,7 +109,7 @@ export const InstalledExtensions = observer(({ extensions, uninstall, enable, di return { extension: ( -
+
{name}
{description}
@@ -130,7 +130,7 @@ export const InstalledExtensions = observer(({ extensions, uninstall, enable, di onClick={() => disable(id)} > - Disable + Disable ) : ( enable(id)} > - Enable + Enable )} uninstall(extension)} > - Uninstall + Uninstall ) }; }); - }, [extensions] + }, [extensions, ExtensionInstallationStateStore.anyUninstalling] ); return ( -
+
Installed extensions} columns={columns}