mirror of
https://github.com/block/buzz.git
synced 2026-11-03 16:01:35 +00:00
Signed-off-by: Will Pfleger <pfleger.will@gmail.com> Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
148 lines
4.0 KiB
TypeScript
148 lines
4.0 KiB
TypeScript
import { hexToBytes } from "@noble/hashes/utils.js";
|
|
import { expect, test } from "@playwright/test";
|
|
import { nsecEncode } from "nostr-tools/nip19";
|
|
|
|
import { installMockBridge, TEST_IDENTITIES } from "../helpers/bridge";
|
|
|
|
test("lost boot opens onboarding gate directly on the key-import page", async ({
|
|
page,
|
|
}) => {
|
|
await installMockBridge(
|
|
page,
|
|
{ identityLost: true },
|
|
{ skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
|
|
await expect(page.getByTestId("onboarding-gate")).toBeVisible();
|
|
await expect(
|
|
page.getByRole("heading", { name: "Re-import your key" }),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("importing a key from lost mode shows the relaunch-required screen", async ({
|
|
page,
|
|
}) => {
|
|
await installMockBridge(
|
|
page,
|
|
{ identityLost: true },
|
|
{ skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
|
|
await expect(
|
|
page.getByRole("heading", { name: "Re-import your key" }),
|
|
).toBeVisible();
|
|
|
|
const importedNsec = nsecEncode(hexToBytes(TEST_IDENTITIES.alice.privateKey));
|
|
await page.getByTestId("nostr-import-nsec-input").fill(importedNsec);
|
|
await expect(page.getByTestId("nostr-import-npub-preview")).toBeVisible();
|
|
await page.getByTestId("nostr-import-submit").click();
|
|
|
|
await expect(page.getByTestId("relaunch-required")).toBeVisible();
|
|
});
|
|
|
|
test("start-new-identity from lost mode persists the ephemeral key after confirmation", async ({
|
|
page,
|
|
}) => {
|
|
await installMockBridge(
|
|
page,
|
|
{ identityLost: true },
|
|
{ skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
|
|
await expect(
|
|
page.getByRole("heading", { name: "Re-import your key" }),
|
|
).toBeVisible();
|
|
|
|
page.on("dialog", (dialog) => dialog.accept());
|
|
await page.getByRole("button", { name: "Start new identity" }).click();
|
|
|
|
await expect(page.getByTestId("relaunch-required")).toBeVisible();
|
|
await expect
|
|
.poll(() =>
|
|
page.evaluate(
|
|
() =>
|
|
(
|
|
window as Window & {
|
|
__BUZZ_E2E_COMMAND_PAYLOADS__?: Array<{ command: string }>;
|
|
}
|
|
).__BUZZ_E2E_COMMAND_PAYLOADS__?.some(
|
|
(e) => e.command === "persist_current_identity",
|
|
) ?? false,
|
|
),
|
|
)
|
|
.toBe(true);
|
|
});
|
|
|
|
test("cancelling start-new-identity in lost mode stays on the import screen", async ({
|
|
page,
|
|
}) => {
|
|
await installMockBridge(
|
|
page,
|
|
{ identityLost: true },
|
|
{ skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
|
|
await expect(
|
|
page.getByRole("heading", { name: "Re-import your key" }),
|
|
).toBeVisible();
|
|
|
|
page.on("dialog", (dialog) => dialog.dismiss());
|
|
await page.getByRole("button", { name: "Start new identity" }).click();
|
|
|
|
// Still on the import screen — no navigation, no persist
|
|
await expect(
|
|
page.getByRole("heading", { name: "Re-import your key" }),
|
|
).toBeVisible();
|
|
await expect(page.getByTestId("relaunch-required")).toHaveCount(0);
|
|
});
|
|
|
|
test("locked boot shows the keyring-locked screen without the onboarding gate or key-import UI", async ({
|
|
page,
|
|
}) => {
|
|
await installMockBridge(
|
|
page,
|
|
{ identityLocked: true },
|
|
{ skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
|
|
await expect(page.getByTestId("keyring-locked")).toBeVisible();
|
|
await expect(page.getByTestId("onboarding-gate")).toHaveCount(0);
|
|
await expect(
|
|
page.getByRole("heading", { name: "Re-import your key" }),
|
|
).toHaveCount(0);
|
|
});
|
|
|
|
test("locked screen relaunch button records the process-restart invoke", async ({
|
|
page,
|
|
}) => {
|
|
await installMockBridge(
|
|
page,
|
|
{ identityLocked: true },
|
|
{ skipOnboardingSeed: true },
|
|
);
|
|
await page.goto("/");
|
|
|
|
await expect(page.getByTestId("keyring-locked")).toBeVisible();
|
|
await page.getByTestId("relaunch-app").click();
|
|
|
|
await expect
|
|
.poll(() =>
|
|
page.evaluate(
|
|
() =>
|
|
(
|
|
window as Window & {
|
|
__BUZZ_E2E_COMMAND_PAYLOADS__?: Array<{ command: string }>;
|
|
}
|
|
).__BUZZ_E2E_COMMAND_PAYLOADS__?.some(
|
|
(e) => e.command === "plugin:process|restart",
|
|
) ?? false,
|
|
),
|
|
)
|
|
.toBe(true);
|
|
});
|