import userEvent from '@testing-library/user-event'; import React from 'react'; import { Container } from './Container'; import { render, screen } from '../../lib/testing'; describe('components/Container', () => { it('handles onPress event', async () => { const user = userEvent.setup(); const handlePress = vi.fn(); render(Content); const container = screen.getByText('Content'); await user.click(container); expect(handlePress).toHaveBeenCalledTimes(1); }); it('applies interactive styles when onPress is present', () => { const { rerender } = render(Content); let container = screen.getByText('Content'); expect(container).not.toHaveClass('cursor-pointer'); rerender( {}}>Content); container = screen.getByText('Content'); expect(container).toHaveClass('cursor-pointer'); expect(container).toHaveClass('hover:brightness-95'); expect(container).toHaveClass('active:opacity-80'); }); it('renders as different HTML elements using the "as" prop', () => { const { rerender } = render(Main Content); expect(screen.getByText('Main Content').tagName).toBe('MAIN'); rerender(Article Content); expect(screen.getByText('Article Content').tagName).toBe('ARTICLE'); rerender(Section Content); expect(screen.getByText('Section Content').tagName).toBe('SECTION'); }); it('renders as an anchor tag with href when href prop is provided', () => { render(Link Content); const linkElement = screen.getByText('Link Content'); expect(linkElement.tagName).toBe('A'); expect(linkElement).toHaveAttribute('href', '/test-path'); }); it('gives precedence to href over onPress', async () => { const user = userEvent.setup(); const handlePress = vi.fn(); render( Link Content ); const linkElement = screen.getByText('Link Content'); await user.click(linkElement); expect(handlePress).not.toHaveBeenCalled(); expect(linkElement.tagName).toBe('A'); }); it('warns when both href and onPress are provided', () => { const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); render( {}}> Content ); expect(consoleWarnSpy).toHaveBeenCalledWith( '[@ermnvldmr/ui] Container cannot have both `onPress` and `href` props.', ); consoleWarnSpy.mockRestore(); }); });