mirror of
https://github.com/block/buzz.git
synced 2026-11-01 06:51:17 +00:00
Signed-off-by: Wes <wesbillman@users.noreply.github.com> Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
137 lines
4.7 KiB
TypeScript
137 lines
4.7 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import { installMockBridge } from "../helpers/bridge";
|
|
import { waitForAnimations } from "../helpers/animations";
|
|
|
|
async function enterMachineBackup(page: import("@playwright/test").Page) {
|
|
await installMockBridge(page, undefined, {
|
|
skipCommunitySeed: true,
|
|
skipOnboardingSeed: true,
|
|
});
|
|
await page.goto("/");
|
|
await page.getByRole("button", { name: "Get started" }).click();
|
|
}
|
|
|
|
const SHOTS = "test-results/screenshots-onboarding";
|
|
|
|
test("backup step appears on fresh-key path after profile submit", async ({
|
|
page,
|
|
}) => {
|
|
await enterMachineBackup(page);
|
|
|
|
await expect(page.getByTestId("onboarding-page-backup")).toBeVisible();
|
|
await expect(
|
|
page.getByRole("heading", {
|
|
name: "Your unique identity has been created",
|
|
}),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("backup step shows masked nsec from mock bridge", async ({ page }) => {
|
|
await enterMachineBackup(page);
|
|
|
|
await expect(page.getByTestId("onboarding-page-backup")).toBeVisible();
|
|
const nsecDisplay = page.getByTestId("nsec-value");
|
|
await expect(nsecDisplay).toBeVisible();
|
|
|
|
// Should start masked (blurred) — reveal button exists and eye icon visible.
|
|
const revealBtn = page.getByTestId("nsec-reveal-toggle");
|
|
await expect(revealBtn).toBeVisible();
|
|
await expect(nsecDisplay).toHaveCSS("filter", /blur/);
|
|
|
|
// Take a screenshot of the masked state.
|
|
await waitForAnimations(page);
|
|
const backupSection = page.locator('[data-testid="onboarding-page-backup"]');
|
|
await backupSection.screenshot({
|
|
path: `${SHOTS}/02-backup-step-masked.png`,
|
|
});
|
|
|
|
// Reveal and verify the mock nsec appears.
|
|
await revealBtn.click();
|
|
await expect(nsecDisplay).not.toHaveCSS("filter", /blur/);
|
|
await expect(nsecDisplay).toContainText("nsec1mock");
|
|
|
|
// Take a screenshot of the revealed state.
|
|
await waitForAnimations(page);
|
|
await backupSection.screenshot({
|
|
path: `${SHOTS}/03-backup-step-revealed.png`,
|
|
});
|
|
});
|
|
|
|
test("backup step Next is enabled once the key is shown", async ({ page }) => {
|
|
await enterMachineBackup(page);
|
|
|
|
await expect(page.getByTestId("onboarding-page-backup")).toBeVisible();
|
|
await expect(page.getByTestId("nsec-value")).toBeVisible();
|
|
await expect(page.getByTestId("onboarding-next")).toBeEnabled();
|
|
});
|
|
|
|
test("backup step advances to machine setup on Next click", async ({
|
|
page,
|
|
}) => {
|
|
await enterMachineBackup(page);
|
|
|
|
await expect(page.getByTestId("onboarding-page-backup")).toBeVisible();
|
|
await expect(page.getByTestId("nsec-value")).toBeVisible();
|
|
await page.getByTestId("onboarding-next").click();
|
|
|
|
await expect(page.getByTestId("onboarding-page-2")).toBeVisible();
|
|
});
|
|
|
|
test("backup step back button returns to machine identity choice", async ({
|
|
page,
|
|
}) => {
|
|
await enterMachineBackup(page);
|
|
|
|
await expect(page.getByTestId("onboarding-page-backup")).toBeVisible();
|
|
await page.getByTestId("onboarding-back").click();
|
|
|
|
await expect(page.getByRole("button", { name: "Get started" })).toBeVisible();
|
|
});
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// B4: Error path coverage
|
|
// ---------------------------------------------------------------------------
|
|
|
|
test("backup step shows error banner and retry button when get_nsec fails", async ({
|
|
page,
|
|
}) => {
|
|
await installMockBridge(
|
|
page,
|
|
{ nsecError: "Keychain locked" },
|
|
{ skipCommunitySeed: true, skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
await page.getByRole("button", { name: "Get started" }).click();
|
|
|
|
await expect(page.getByTestId("onboarding-page-backup")).toBeVisible();
|
|
await expect(page.getByTestId("backup-load-error")).toBeVisible();
|
|
await expect(page.getByTestId("backup-retry")).toBeVisible();
|
|
// Next is blocked on error; Skip for now ghost is shown instead.
|
|
await expect(page.getByTestId("onboarding-next")).toBeDisabled();
|
|
await expect(page.getByTestId("backup-skip")).toBeVisible();
|
|
|
|
// Skip for now still advances to machine setup.
|
|
await page.getByTestId("backup-skip").click();
|
|
await expect(page.getByTestId("onboarding-page-2")).toBeVisible();
|
|
});
|
|
|
|
test("backup step retry succeeds and shows key after initial failure", async ({
|
|
page,
|
|
}) => {
|
|
// First call fails, second succeeds (sequenced via nsecErrors).
|
|
await installMockBridge(
|
|
page,
|
|
{ nsecErrors: ["Keychain locked", null] },
|
|
{ skipCommunitySeed: true, skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
await page.getByRole("button", { name: "Get started" }).click();
|
|
|
|
await expect(page.getByTestId("backup-load-error")).toBeVisible();
|
|
|
|
// Retry — second call succeeds.
|
|
await page.getByTestId("backup-retry").click();
|
|
await expect(page.getByTestId("nsec-value")).toBeVisible();
|
|
await expect(page.getByTestId("backup-load-error")).not.toBeVisible();
|
|
});
|