Some checks failed
Release Workflow / checks (push) Has been cancelled
Release Workflow / e2e-tests (push) Has been cancelled
Release Workflow / determine-release-type (push) Has been cancelled
Release Workflow / build-images (push) Has been cancelled
Release Workflow / publish-release (push) Has been cancelled
* test(e2e): admin user registration * ci: e2e workflow * feat: disable rate limiting env var * test(e2e): fix order of execution in registration tests * ci: run e2e tests before release
82 lines
2.9 KiB
TypeScript
82 lines
2.9 KiB
TypeScript
import fs from "fs";
|
|
import { test, expect } from "@playwright/test";
|
|
import { resetDatabase } from "./helpers/db";
|
|
|
|
// TODO: Run these tests with different users once multi-user support is added
|
|
|
|
// Run tests in serial mode to avoid conflicts during onboarding
|
|
test.describe.configure({ mode: "serial" });
|
|
|
|
test.beforeAll(async () => {
|
|
await resetDatabase();
|
|
});
|
|
|
|
test("should redirect to onboarding", async ({ page }) => {
|
|
await page.goto("/");
|
|
|
|
await page.waitForURL(/onboarding/);
|
|
|
|
await expect(page).toHaveTitle(/Zerobyte - Onboarding/);
|
|
});
|
|
|
|
test("user can register a new account", async ({ page }) => {
|
|
await page.goto("/onboarding");
|
|
|
|
await page.getByRole("textbox", { name: "Email" }).click();
|
|
await page.getByRole("textbox", { name: "Email" }).fill("test@test.com");
|
|
|
|
await page.getByRole("textbox", { name: "Username" }).fill("test");
|
|
|
|
await page.getByRole("textbox", { name: "Password", exact: true }).fill("password");
|
|
await page.getByRole("textbox", { name: "Confirm Password" }).fill("password");
|
|
|
|
await page.getByRole("button", { name: "Create admin user" }).click();
|
|
|
|
await expect(page.getByText("Download Your Recovery Key")).toBeVisible();
|
|
});
|
|
|
|
test("user can download recovery key", async ({ page }) => {
|
|
await page.goto("/login");
|
|
|
|
await page.getByRole("textbox", { name: "Username" }).fill("test");
|
|
await page.getByRole("textbox", { name: "Password" }).fill("password");
|
|
await page.getByRole("button", { name: "Login" }).click();
|
|
|
|
await expect(page.getByText("Download Your Recovery Key")).toBeVisible();
|
|
|
|
await page.getByRole("textbox", { name: "Confirm Your Password" }).fill("test");
|
|
await page.getByRole("button", { name: "Download Recovery Key" }).click();
|
|
|
|
// Should not be able to download with invalid confirm password
|
|
await expect(page.getByText("Invalid password")).toBeVisible();
|
|
|
|
await page.getByRole("textbox", { name: "Confirm Your Password" }).fill("password");
|
|
|
|
const downloadPromise = page.waitForEvent("download");
|
|
await page.getByRole("button", { name: "Download Recovery Key" }).click();
|
|
|
|
const download = await downloadPromise;
|
|
|
|
expect(download.suggestedFilename()).toBe("restic.pass");
|
|
await download.saveAs("./data/restic.pass");
|
|
|
|
const fileContent = await fs.promises.readFile("./data/restic.pass", "utf8");
|
|
|
|
expect(fileContent).toHaveLength(64);
|
|
});
|
|
|
|
test("can't create another admin user after initial setup", async ({ page }) => {
|
|
await page.goto("/onboarding");
|
|
|
|
await page.getByRole("textbox", { name: "Email" }).click();
|
|
await page.getByRole("textbox", { name: "Email" }).fill("test@test.com");
|
|
|
|
await page.getByRole("textbox", { name: "Username" }).fill("test");
|
|
|
|
await page.getByRole("textbox", { name: "Password", exact: true }).fill("password");
|
|
await page.getByRole("textbox", { name: "Confirm Password" }).fill("password");
|
|
|
|
await page.getByRole("button", { name: "Create admin user" }).click();
|
|
|
|
await expect(page.getByText("Failed to create admin user")).toBeVisible();
|
|
});
|