import { render, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { vi } from 'vitest'; import { useErc721 } from '../../../../hooks'; import ERC721SymbolDisplay from './ERC721SymbolDisplay'; // Mock the useErc721 hook vi.mock('@/hooks', () => ({ useErc721: vi.fn(), })); describe('ERC721SymbolDisplay', () => { const mockGetErc721Symbol = vi.fn(); beforeEach(() => { (useErc721 as jest.Mock).mockReturnValue({ getErc721Symbol: mockGetErc721Symbol, }); }); afterEach(() => { vi.clearAllMocks(); }); it('renders without crashing', () => { render(); expect(screen.getByText(/ERC721 Token Symbol:/)).toBeInTheDocument(); }); it('fetches and displays the ERC721 token symbol', async () => { mockGetErc721Symbol.mockResolvedValue({ symbol: 'MOCK' }); render(); await waitFor(() => { expect(screen.getByText(/ERC721 Token Symbol: MOCK/)).toBeInTheDocument(); }); }); it('displays an error message if fetching the symbol fails', async () => { mockGetErc721Symbol.mockRejectedValue(new Error('Failed to fetch symbol')); render(); await waitFor(() => { expect(screen.getByText(/ERC721 Token Symbol:/)).toBeInTheDocument(); }); // Check console.error is called expect(console.error).toHaveBeenCalledWith( 'Failed to fetch ERC721 symbol:', expect.any(Error) ); }); it('applies additional CSS classes', () => { render( ); expect(screen.getByText(/ERC721 Token Symbol:/)).toHaveClass('my-class'); }); });