Files
buzz/desktop/tests/e2e/profile-nsec-reveal.spec.ts
T
cls 9dfa06ffee
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
feat: import Chinese-localized Buzz source snapshot
Signed-off-by: cls_宁波本机 <908705107@qq.com>
2026-08-13 18:34:25 +08:00

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",
);
});