diff --git a/tests/e2e/panel.spec.ts b/tests/e2e/panel.spec.ts new file mode 100644 index 0000000..dc2d993 --- /dev/null +++ b/tests/e2e/panel.spec.ts @@ -0,0 +1,57 @@ +import { expect, test } from "@playwright/test"; + +test("login and dashboard navigation", async ({ page }) => { + await page.goto("/login"); + await page.locator('input[name="password"]').fill("correct-password"); + await page.getByRole("button", { name: "Sign in" }).click(); + await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible(); + await expect(page.getByRole("heading", { name: "Resource usage" })).toBeVisible(); +}); + +test("tool search finds terminal", async ({ page }) => { + await page.goto("/tools"); + await page.getByPlaceholder("Search all CoaxysPanel tools").fill("terminal"); + await expect(page.getByRole("link", { name: /Terminal/ }).first()).toBeVisible(); +}); + +test("website creation wizard validates", async ({ page }) => { + await page.goto("/websites/new"); + await page.getByRole("button", { name: "Continue" }).click(); + await expect(page.getByText("Use at least three characters.").first()).toBeVisible(); + await page.getByLabel("Name").fill("Production site"); + await page.getByRole("button", { name: "Continue" }).click(); + await expect(page.getByRole("heading", { name: "Domain selection" })).toBeVisible(); +}); + +test("dns record editor renders records", async ({ page }) => { + await page.goto("/domains/example.com/dns"); + await expect(page.getByRole("heading", { name: "DNS Zone Editor" })).toBeVisible(); + await expect(page.getByText("www.example.com.")).toBeVisible(); +}); + +test("file manager exposes core actions", async ({ page }) => { + await page.goto("/files"); + await expect(page.getByRole("button", { name: "Upload" }).first()).toBeVisible(); + await expect(page.getByText("index.php")).toBeVisible(); +}); + +test("database and email creation entry points render", async ({ page }) => { + await page.goto("/databases/new"); + await expect(page.getByRole("heading", { name: "Database name" })).toBeVisible(); + await page.goto("/email/accounts"); + await expect(page.getByText("admin@example.com")).toBeVisible(); +}); + +test("backup and security screens render", async ({ page }) => { + await page.goto("/backups/new"); + await expect(page.getByRole("heading", { name: "Scope" })).toBeVisible(); + await page.goto("/security"); + await expect(page.getByText("86/100")).toBeVisible(); +}); + +test("theme switching menu opens", async ({ page }) => { + await page.goto("/dashboard"); + await page.getByLabel("Theme selector").click(); + await page.getByRole("menuitem", { name: "dark" }).click(); + await expect(page.locator("html")).toHaveClass(/dark/); +});