Files
buzz/desktop/tests/e2e/profile-nsec-reveal.spec.ts

66 lines
2.4 KiB
TypeScript

/**
* Compact E2E tests for NsecRevealRow in ProfileSettingsCard.
* Covers: reveal fetches + renders masked value, error state, collapse clears state.
*/
import { expect, test } from "@playwright/test";
import { installMockBridge } from "../helpers/bridge";
import { openSettings } from "../helpers/settings";
/** Expand the identity details section if it is not already open. */
async function expandIdentity(page: import("@playwright/test").Page) {
const identity = page.getByTestId("profile-identity-card");
const isOpen = await identity.evaluate(
(el) => el instanceof HTMLDetailsElement && el.open,
);
if (!isOpen) {
await page.getByTestId("profile-identity-toggle").click();
}
await expect(page.getByTestId("profile-identity-details")).toBeVisible();
}
test("reveal shows masked nsec value and hides it again on collapse", async ({
page,
}) => {
await installMockBridge(page);
await page.goto("/");
await openSettings(page, "profile");
await expandIdentity(page);
const revealToggle = page.getByTestId("profile-private-key-toggle");
await expect(revealToggle).toBeVisible();
await expect(revealToggle).toHaveText("Reveal");
// Reveal — the masked nsec display should appear.
await revealToggle.click();
await expect(revealToggle).toHaveText("Hide");
const nsecDisplay = page.locator(
'[data-testid="profile-private-key-row"] [data-testid="nsec-value"]',
);
await expect(nsecDisplay).toBeVisible();
// The mock bridge returns "nsec1mock…"; the display starts masked (blurred).
await expect(nsecDisplay).toHaveCSS("filter", /blur/);
// Hide — the nsec display should disappear (state cleared).
await revealToggle.click();
await expect(revealToggle).toHaveText("Reveal");
await expect(nsecDisplay).not.toBeVisible();
});
test("reveal shows error when get_nsec fails", async ({ page }) => {
await installMockBridge(page, { nsecError: "Keychain locked" });
await page.goto("/");
await openSettings(page, "profile");
await expandIdentity(page);
const revealToggle = page.getByTestId("profile-private-key-toggle");
await revealToggle.click();
// Error text should appear inside the private-key row.
const keyRow = page.getByTestId("profile-private-key-row");
await expect(keyRow.locator(".text-destructive")).toBeVisible();
await expect(keyRow.locator(".text-destructive")).toContainText(
"Keychain locked",
);
});