import '@testing-library/jest-dom'; import { useIsMounted } from '@/internal/hooks/useIsMounted'; import { NFTProvider } from '@/nft/components/NFTProvider'; import { render } from '@testing-library/react'; import { type Mock, afterEach, beforeEach, describe, expect, it, vi, } from 'vitest'; import { useAccount } from 'wagmi'; import { NFTCard } from './NFTCard'; vi.mock('wagmi', () => ({ useAccount: vi.fn(), })); vi.mock('@/internal/hooks/useIsMounted'); vi.mock('@/nft/components/NFTProvider', () => ({ NFTProvider: vi.fn(({ children }) =>
{children}
), })); vi.mock('./view', () => ({ NFTMedia: () =>
, NFTTitle: () =>
, NFTOwner: () =>
, NFTLastSoldPrice: () =>
, NFTNetwork: () =>
, })); describe('NFTView', () => { beforeEach(() => { (useIsMounted as Mock).mockReturnValue(true); (useAccount as Mock).mockReturnValue({ chain: null }); }); afterEach(() => { vi.clearAllMocks(); }); it('should render correctly when mounted', () => { const { getByTestId, getByText } = render(
Child Component
, ); expect(getByTestId('ockNFTCard_Container')).toBeInTheDocument(); expect(getByText('Child Component')).toBeInTheDocument(); expect(getByTestId('ockNFTCard_Container')).toHaveClass('test-class'); }); it('should not render when not mounted', () => { (useIsMounted as Mock).mockReturnValue(false); const { queryByTestId } = render(
Child Component
, ); expect(queryByTestId('ockNFTCard_Container')).not.toBeInTheDocument(); }); it('should render default content when no children are provided', () => { const { getByTestId } = render( , ); expect(getByTestId('nft-media')).toBeInTheDocument(); expect(getByTestId('nft-title')).toBeInTheDocument(); expect(getByTestId('nft-owner')).toBeInTheDocument(); expect(getByTestId('nft-last-sold-price')).toBeInTheDocument(); expect(getByTestId('nft-network')).toBeInTheDocument(); }); it('should pass contractAddress and tokenId to NFTProvider', () => { render(
Child Component
, ); expect(NFTProvider).toHaveBeenCalledWith( expect.objectContaining({ contractAddress: '0x123', tokenId: '1', }), undefined, ); }); it('should go to zora onclick when on base chain', () => { window.open = vi.fn(); (useAccount as Mock).mockReturnValue({ chain: { name: 'Base' } }); const { getByTestId } = render(
Child Component
, ); const button = getByTestId('ockNFTCard_Container'); button.click(); expect(window.open).toHaveBeenCalledWith( 'https://zora.co/collect/base:0x123/1', '_blank', 'noopener,noreferrer', ); }); it('should go to zora onclick defaulting to base when chain is null', () => { window.open = vi.fn(); const { getByTestId } = render(
Child Component
, ); const button = getByTestId('ockNFTCard_Container'); button.click(); expect(window.open).toHaveBeenCalledWith( 'https://zora.co/collect/base:0x123/1', '_blank', 'noopener,noreferrer', ); }); });