import { describe, it, expect, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import { CypherImage } from './ui/CypherImage'; // Mock external dependencies vi.mock('@/lib/utils', () => ({ cn: (...classes: (string | undefined | null)[]) => classes.filter(Boolean).join(' '), })); describe('Create Cell Without Icon - CypherImage Fallback', () => { it('shows fallback identicon when src is empty (simulating cell without icon)', () => { render( ); // Verify that the fallback identicon is rendered instead of an img tag const identicon = screen.getByTitle('Test Cell'); expect(identicon).toBeInTheDocument(); // Check for the fallback identicon characteristics expect(identicon).toHaveClass('flex', 'items-center', 'justify-center'); // The fallback should contain the first letter of the alt text (cell name) const firstLetter = screen.getByText('T'); // First letter of "Test Cell" expect(firstLetter).toBeInTheDocument(); expect(firstLetter).toHaveClass('font-bold'); // Should not render an img element when src is empty const imgElement = screen.queryByRole('img'); expect(imgElement).not.toBeInTheDocument(); }); it('shows fallback identicon when src is undefined (simulating cell without icon)', () => { render( ); // Verify that the fallback identicon is rendered const identicon = screen.getByTitle('Another Cell'); expect(identicon).toBeInTheDocument(); // The fallback should contain the first letter of the alt text const firstLetter = screen.getByText('A'); // First letter of "Another Cell" expect(firstLetter).toBeInTheDocument(); // Should not render an img element when src is undefined const imgElement = screen.queryByRole('img'); expect(imgElement).not.toBeInTheDocument(); }); it('shows fallback identicon with correct cyberpunk styling', () => { render( ); const identicon = screen.getByTitle('Cyberpunk Cell'); // Check for cyberpunk styling elements expect(identicon).toHaveStyle({ backgroundColor: '#0a1119' }); // Check that the first letter is rendered with appropriate styling const firstLetter = screen.getByText('C'); expect(firstLetter).toHaveClass( 'relative', 'font-bold', 'cyberpunk-glow', 'z-10' ); }); it('renders normal img when src is provided (control test)', () => { render( ); // Should render an img element when src is provided const imgElement = screen.getByRole('img'); expect(imgElement).toBeInTheDocument(); expect(imgElement).toHaveAttribute( 'src', 'https://example.com/valid-image.jpg' ); expect(imgElement).toHaveAttribute('alt', 'Valid Image Cell'); // Should not show fallback identicon when image src is provided const identicon = screen.queryByTitle('Valid Image Cell'); expect(identicon).not.toBeInTheDocument(); }); it('generates unique fallbacks for different cell names', () => { const { rerender } = render( ); const alphaLetter = screen.getByText('A'); expect(alphaLetter).toBeInTheDocument(); rerender( ); const betaLetter = screen.getByText('B'); expect(betaLetter).toBeInTheDocument(); // Alpha should no longer be present expect(screen.queryByText('A')).not.toBeInTheDocument(); }); });