diff --git a/packages/dashboard/app/components/SecretsView.tsx b/packages/dashboard/app/components/SecretsView.tsx index 4b31fd80e..09d997f05 100644 --- a/packages/dashboard/app/components/SecretsView.tsx +++ b/packages/dashboard/app/components/SecretsView.tsx @@ -275,8 +275,7 @@ export const SecretsView = ({ addToast }: SecretsViewProps) => {

- Shared passphrase used to wrap cross-node secret bundles. Both nodes in a sync pair must share the same value. Stored locally only; never transmitted. {" "} - Learn more + Shared passphrase used to wrap cross-node secret bundles. Both nodes in a sync pair must share the same value. Stored locally only; never transmitted.

diff --git a/packages/dashboard/app/components/__tests__/SecretsView.test.tsx b/packages/dashboard/app/components/__tests__/SecretsView.test.tsx index 9c142817d..35d06a886 100644 --- a/packages/dashboard/app/components/__tests__/SecretsView.test.tsx +++ b/packages/dashboard/app/components/__tests__/SecretsView.test.tsx @@ -60,6 +60,22 @@ describe("SecretsView", () => { expect(screen.getByRole("button", { name: "Clear" })).toBeInTheDocument(); }); + it("FN-5222: does not render a docs link in the cross-node sync card", async () => { + vi.stubGlobal( + "fetch", + vi + .fn() + .mockResolvedValueOnce(mockJsonResponse({ ok: true, body: { secrets: [] } })) + .mockResolvedValueOnce(mockJsonResponse({ ok: true, body: { configured: false } })), + ); + + render(); + + await screen.findByText("Not configured"); + expect(screen.queryByRole("link", { name: "Learn more" })).not.toBeInTheDocument(); + expect(document.querySelector('a[href^="/docs/secrets.md"]')).toBeNull(); + }); + it("submitting matching passphrases issues PUT and re-fetches status", async () => { const fetchMock = vi .fn()