import '@testing-library/jest-dom';
import { useNFTContext } from '@/nft/components/NFTProvider';
import { render } from '@testing-library/react';
import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest';
import { NFTMinters } from './NFTMinters';
vi.mock('@/nft/components/NFTProvider');
vi.mock('@/identity', async () => ({
...(await vi.importActual('@/identity')),
Identity: ({
className,
children,
}: {
className: string;
children: React.ReactNode;
}) =>
{children}
,
Avatar: () => Avatar
,
Name: () => Name
,
}));
describe('NFTMinters', () => {
const mockUseNFTContext = useNFTContext as Mock;
beforeEach(() => {
mockUseNFTContext.mockReturnValue({
contractAddress: 'test-address',
totalOwners: 5,
recentOwners: ['0x123', '0x456'],
});
});
it('should render null if recentOwners is undefined', () => {
mockUseNFTContext.mockReturnValue({
contractAddress: 'test-address',
totalOwners: 5,
});
const { container } = render();
expect(container.firstChild).toBeNull();
});
it('should render null if recentOwners has no owners', () => {
mockUseNFTContext.mockReturnValue({
contractAddress: 'test-address',
totalOwners: 5,
recentOwners: [],
});
const { container } = render();
expect(container.firstChild).toBeNull();
});
it('should not render total owners if it is not available', () => {
mockUseNFTContext.mockReturnValue({
contractAddress: 'test-address',
recentOwners: ['0x123', '0x456'],
});
const { queryByText } = render();
expect(queryByText('and')).toBeNull();
});
it('should render the recent minters', () => {
const { getByText } = render();
expect(getByText('Minted by')).toBeInTheDocument();
expect(getByText('and 5 others')).toBeInTheDocument();
});
it('should render the correct number of avatars', () => {
const { getAllByText } = render();
expect(getAllByText('Avatar')).toHaveLength(2);
});
});