import { describe, expect, it } from "vitest"; import { render, waitFor } from "../../../../test/src/react-render.js"; import { TEST_CLIENT } from "../../../../test/src/test-clients.js"; import { SiteLink } from "./SiteLink.js"; describe("SiteLink", () => { it("renders anchor with correct href", () => { const testUrl = "https://example.com/"; const { container } = render( Test Link , ); const anchor = container.querySelector("a"); expect(anchor).toBeTruthy(); expect(anchor?.href).toBe(testUrl); expect(anchor?.textContent).toBe("Test Link"); }); it("throws error if clientId is not provided", () => { const testUrl = "https://example.com/"; expect(() => render( // biome-ignore lint/suspicious/noExplicitAny: testing invalid input Test Link , ), ).toThrow("The SiteLink client must have a clientId"); }); it("adds wallet params to url when wallet is connected", async () => { const testUrl = "https://example.com/"; const { container } = render( Test Link , { setConnectedWallet: true, }, ); const anchor = container.querySelector("a"); expect(anchor).toBeTruthy(); await waitFor(() => expect(anchor?.href).toContain("walletId=")); }); it("uses inApp wallet when wallet is a smart wallet", async () => { const testUrl = "https://example.com/"; const { container } = render( Test Link , { setConnectedWallet: true, walletId: "smart", }, ); const anchor = container.querySelector("a"); expect(anchor).toBeTruthy(); await waitFor(() => expect(anchor?.href).toContain("walletId=inApp")); }); it("preserves hash fragment for hash-routed URLs", async () => { const testUrl = "https://snapshot.org/#/s:wampei.eth"; const { container } = render( Test Link , { setConnectedWallet: true, }, ); const anchor = container.querySelector("a"); expect(anchor).toBeTruthy(); await waitFor(() => { const href = anchor?.href ?? ""; // Hash fragment must be preserved in the URL expect(href).toContain("#/s:wampei.eth"); expect(href).toContain("walletId="); }); }); });