diff --git a/e2e-tests/delete_app.spec.ts b/e2e-tests/delete_app.spec.ts new file mode 100644 index 0000000..017540f --- /dev/null +++ b/e2e-tests/delete_app.spec.ts @@ -0,0 +1,28 @@ +import fs from "fs"; +import { test } from "./helpers/test_helper"; +import { expect } from "@playwright/test"; +test("delete app", async ({ po }) => { + await po.setUp(); + await po.sendPrompt("hi"); + const appName = await po.getCurrentAppName(); + if (!appName) { + throw new Error("App name not found"); + } + const appPath = await po.getCurrentAppPath(); + await po.getTitleBarAppNameButton().click(); + await expect(po.getAppListItem({ appName })).toBeVisible(); + + // Delete app + await po.clickAppDetailsMoreOptions(); + // Open delete dialog + await po.page.getByRole("button", { name: "Delete" }).click(); + // Confirm delete + await po.page.getByRole("button", { name: "Delete App" }).click(); + + // Make sure the app is deleted + await expect(async () => { + expect(await po.getCurrentAppName()).toBe("(no app selected)"); + }).toPass(); + expect(fs.existsSync(appPath)).toBe(false); + expect(po.getAppListItem({ appName })).not.toBeVisible(); +}); diff --git a/e2e-tests/helpers/test_helper.ts b/e2e-tests/helpers/test_helper.ts index 3484ffb..b9a3659 100644 --- a/e2e-tests/helpers/test_helper.ts +++ b/e2e-tests/helpers/test_helper.ts @@ -232,6 +232,10 @@ class PageObject { return this.page.getByTestId("title-bar-app-name-button"); } + getAppListItem({ appName }: { appName: string }) { + return this.page.getByTestId(`app-list-item-${appName}`); + } + async getCurrentAppName() { return (await this.getTitleBarAppNameButton().textContent())?.replace( "App: ", @@ -246,6 +250,13 @@ class PageObject { } return path.join(this.userDataDir, "dyad-apps", currentAppName); } + async clickAppListItem({ appName }: { appName: string }) { + await this.page.getByTestId(`app-list-item-${appName}`).click(); + } + + async clickAppDetailsMoreOptions() { + await this.page.getByTestId("app-details-more-options-button").click(); + } //////////////////////////////// // Settings related diff --git a/src/components/AppList.tsx b/src/components/AppList.tsx index 0cfd8f7..8c5eafb 100644 --- a/src/components/AppList.tsx +++ b/src/components/AppList.tsx @@ -63,7 +63,7 @@ export function AppList({ show }: { show?: boolean }) { ) : apps.length === 0 ? (
No apps found
) : ( - + {apps.map((app) => (