import { describe, expect, it } from "vitest"; import { render, screen, waitFor } from "~test/react-render.js"; import { ethereum } from "../../../../../chains/chain-definitions/ethereum.js"; import { defineChain } from "../../../../../chains/utils.js"; import { getFunctionId } from "../../../../../utils/function-id.js"; import { ChainName, fetchChainName, getQueryKeys } from "./name.js"; import { ChainProvider } from "./provider.js"; describe.runIf(process.env.TW_SECRET_KEY)("ChainName component", () => { it("should return the correct chain name, if the name exists in the chain object", async () => { render( , ); await waitFor( () => expect( screen.getByText("Ethereum", { exact: true, selector: "span", }), ).toBeInTheDocument(), { timeout: 2000 }, ); }); it("should return the correct chain name, if the name is loaded from the server", async () => { render( , ); await waitFor( () => expect( screen.getByText("Ethereum Mainnet", { exact: true, selector: "span", }), ).toBeInTheDocument(), { timeout: 2000 }, ); }); it("should return the correct FORMATTED chain name", async () => { render( `${str}-formatted`} /> , ); await waitFor( () => expect( screen.getByText("Ethereum-formatted", { exact: true, selector: "span", }), ).toBeInTheDocument(), { timeout: 2000 }, ); }); it("should fallback properly when fail to resolve chain name", async () => { render( oops} /> , ); await waitFor( () => expect( screen.getByText("oops", { exact: true, selector: "span", }), ).toBeInTheDocument(), { timeout: 2000 }, ); }); it("fetchChainName should respect nameResolver as a string", async () => { const res = await fetchChainName({ chain: ethereum, nameResolver: "eth_mainnet", }); expect(res).toBe("eth_mainnet"); }); it("fetchChainName should respect nameResolver as a non-async function", async () => { const res = await fetchChainName({ chain: ethereum, nameResolver: () => "eth_mainnet", }); expect(res).toBe("eth_mainnet"); }); it("fetchChainName should respect nameResolver as an async function", async () => { const res = await fetchChainName({ chain: ethereum, nameResolver: async () => { await new Promise((resolve) => setTimeout(resolve, 2000)); return "eth_mainnet"; }, }); expect(res).toBe("eth_mainnet"); }); it("getQueryKeys should work without nameResolver", () => { expect(getQueryKeys({ chainId: 1 })).toStrictEqual([ "_internal_chain_name_", 1, ]); }); it("getQueryKeys should work WITH nameResolver", () => { const nameResolver = () => "tw"; const fnId = getFunctionId(nameResolver); expect(getQueryKeys({ chainId: 1, nameResolver })).toStrictEqual([ "_internal_chain_name_", 1, { resolver: fnId }, ]); }); });