import '@testing-library/jest-dom';
import { useNFTContext } from '@/nft/components/NFTProvider';
import { useOnchainKit } from '@/useOnchainKit';
import { render } from '@testing-library/react';
import {
type Mock,
afterEach,
beforeEach,
describe,
expect,
it,
vi,
} from 'vitest';
import { NFTOwner } from './NFTOwner';
vi.mock('@/useOnchainKit');
vi.mock('@/nft/components/NFTProvider');
vi.mock('@/identity', async () => ({
...(await vi.importActual('@/identity')),
Identity: ({
className,
address,
}: {
className: string;
address: string;
}) =>
{address}
,
}));
describe('NFTOwner', () => {
const mockUseOnchainKit = useOnchainKit as Mock;
const mockUseNFTContext = useNFTContext as Mock;
beforeEach(() => {
mockUseOnchainKit.mockReturnValue({ schemaId: 'test-schema-id' });
mockUseNFTContext.mockReturnValue({
ownerAddress: 'test-owner-address',
});
});
afterEach(() => {
vi.clearAllMocks();
});
it('should render correctly with default label', () => {
const { getByText } = render();
expect(getByText('Owned by')).toBeInTheDocument();
});
it('should render correctly with custom label', () => {
const { getByText } = render();
expect(getByText('Custom Label')).toBeInTheDocument();
});
it('should not render if ownerAddress is not provided', () => {
mockUseNFTContext.mockReturnValueOnce({ ownerAddress: null });
const { container } = render();
expect(container.firstChild).toBeNull();
});
it('should render Identity component with correct props', () => {
const { getByText } = render();
expect(getByText('test-owner-address')).toBeInTheDocument();
});
});