import { render, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { vi } from 'vitest'; import { useErc721 } from '../../../../hooks'; import { ERC721BalanceDisplay } from './ERC721BalanceDisplay'; // Mock the useErc721 hook vi.mock('@/hooks', () => ({ useErc721: vi.fn(), })); describe('ERC721BalanceDisplay', () => { const mockGetErc721BalanceOf = vi.fn(); beforeEach(() => { (useErc721 as jest.Mock).mockReturnValue({ getErc721BalanceOf: mockGetErc721BalanceOf, }); }); afterEach(() => { vi.clearAllMocks(); }); it('renders without crashing', () => { render( ); expect(screen.getByText(/ERC721 Balance:/)).toBeInTheDocument(); }); it('fetches and displays the balance', async () => { mockGetErc721BalanceOf.mockResolvedValue({ balance: '10' }); render( ); await waitFor(() => { expect(screen.getByText(/ERC721 Balance: 10/)).toBeInTheDocument(); }); }); it('displays an error message if fetching balance fails', async () => { console.error = vi.fn(); // Suppress error logging mockGetErc721BalanceOf.mockRejectedValue( new Error('Failed to fetch balance') ); render( ); await waitFor(() => { expect(console.error).toHaveBeenCalledWith( 'Failed to fetch ERC721 balance:', expect.any(Error) ); }); }); it('applies additional CSS classes', () => { render( ); const element = screen.getByText(/ERC721 Balance:/); expect(element).toHaveClass('my-custom-class'); }); });