import React from 'react'; import { render, screen } from '@testing-library/react'; import '@testing-library/jest-dom'; import { SkeletonCard } from '../SkeletonCard'; describe('SkeletonCard', () => { it('renders without crashing', () => { const { container } = render(); expect(container.firstChild).toBeInTheDocument(); }); it('renders placeholder image', () => { render(); const imageContainer = screen.getByTestId('skeleton-image-container'); expect(imageContainer).toBeInTheDocument(); }); it('renders skeleton headline', () => { render(); const skeletonHeadline = screen.getByTestId('skeleton-headline'); expect(skeletonHeadline).toBeInTheDocument(); }); it('renders four skeleton data points in the list', () => { render(); const dataPoints = [ screen.getByTestId('skeleton-data-point-1'), screen.getByTestId('skeleton-data-point-2'), screen.getByTestId('skeleton-data-point-3'), screen.getByTestId('skeleton-data-point-4') ]; expect(dataPoints.length).toBe(4); }); it('renders skeleton lines for data points', () => { render(); const skeletonLines = [ screen.getByTestId('skeleton-line-1'), screen.getByTestId('skeleton-line-2'), screen.getByTestId('skeleton-line-3'), screen.getByTestId('skeleton-line-4'), screen.getByTestId('skeleton-price-label') ]; expect(skeletonLines.length).toBe(5); }); it('renders skeleton price', () => { render(); const skeletonPrice = screen.getByTestId('skeleton-price'); expect(skeletonPrice).toBeInTheDocument(); }); it('renders skeleton button', () => { render(); const skeletonButton = screen.getByTestId('skeleton-button'); expect(skeletonButton).toBeInTheDocument(); }); it('has correct card structure', () => { render(); const cardContainer = screen.getByTestId('skeleton-card-container'); const cardContent = screen.getByTestId('skeleton-card-content'); const topContainer = screen.getByTestId('skeleton-top-container'); const bottomContainer = screen.getByTestId('skeleton-bottom-container'); expect(cardContainer).toBeInTheDocument(); expect(cardContent).toBeInTheDocument(); expect(topContainer).toBeInTheDocument(); expect(bottomContainer).toBeInTheDocument(); }); it('renders price section with container', () => { render(); const priceSection = screen.getByTestId('skeleton-price-section'); const priceContainer = screen.getByTestId('skeleton-price-container'); expect(priceSection).toBeInTheDocument(); expect(priceContainer).toBeInTheDocument(); }); it('renders data points list', () => { render(); const dataPointsList = screen.getByTestId('skeleton-data-points-list'); expect(dataPointsList).toBeInTheDocument(); }); it('skeleton lines are rendered for each data point', () => { render(); const skeletonLines = [ screen.getByTestId('skeleton-line-1'), screen.getByTestId('skeleton-line-2'), screen.getByTestId('skeleton-line-3'), screen.getByTestId('skeleton-line-4'), screen.getByTestId('skeleton-price-label') ]; expect(skeletonLines.length).toBe(5); }); it('renders with correct skeleton styling', () => { render(); expect(screen.getByTestId('skeleton-headline')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-price')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-button')).toBeInTheDocument(); // Check that skeleton lines are present expect(screen.getByTestId('skeleton-line-1')).toBeInTheDocument(); }); it('renders consistent structure', () => { render(); expect(screen.getByTestId('skeleton-card-container')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-image-container')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-card-content')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-top-container')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-bottom-container')).toBeInTheDocument(); }); it('can render multiple skeleton cards', () => { render( <> ); const cards = screen.getAllByTestId('skeleton-card-container'); expect(cards.length).toBe(3); }); it('renders skeleton elements in correct order', () => { render(); const cardContent = screen.getByTestId('skeleton-card-content'); const topContainer = screen.getByTestId('skeleton-top-container'); const bottomContainer = screen.getByTestId('skeleton-bottom-container'); // Verify both containers exist as children of card content expect(cardContent.contains(topContainer)).toBe(true); expect(cardContent.contains(bottomContainer)).toBe(true); }); it('skeleton button has correct structure', () => { render(); const skeletonButton = screen.getByTestId('skeleton-button'); expect(skeletonButton.tagName.toLowerCase()).toBe('div'); }); it('skeleton lines have correct width props', () => { render(); // Check that the skeleton lines are rendered expect(screen.getByTestId('skeleton-line-1')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-line-2')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-line-3')).toBeInTheDocument(); expect(screen.getByTestId('skeleton-line-4')).toBeInTheDocument(); }); it('renders without any interactive elements', () => { const { container } = render(); const buttons = container.querySelectorAll('button'); const links = container.querySelectorAll('a'); expect(buttons.length).toBe(0); expect(links.length).toBe(0); }); });