import React from 'react'; import { render } from '@testing-library/react'; import '@testing-library/jest-dom'; import { SkeletonLine, SkeletonHeadline, SkeletonPrice, SkeletonButton } from '../skeletonStyles'; describe('Skeleton Styles', () => { describe('SkeletonLine', () => { it('renders with default width', () => { const { container } = render(); const element = container.firstChild; expect(element).toBeInTheDocument(); }); it('accepts custom width prop', () => { const { container } = render(); const element = container.firstChild; expect(element).toBeInTheDocument(); }); it('accepts custom marginBottom prop', () => { const { container } = render(); const element = container.firstChild; expect(element).toBeInTheDocument(); }); it('accepts both width and marginBottom props', () => { const { container } = render( ); const element = container.firstChild; expect(element).toBeInTheDocument(); }); it('renders as a div element', () => { const { container } = render(); const element = container.firstChild; if (element) { expect(element.nodeName).toBe('DIV'); } }); it('applies skeleton styling', () => { const { container } = render(); const element = container.firstChild as HTMLElement; expect(element.className).toMatch(/sc-/); }); }); describe('SkeletonHeadline', () => { it('renders correctly', () => { const { container } = render(); const element = container.firstChild; expect(element).toBeInTheDocument(); }); it('renders as a div element', () => { const { container } = render(); const element = container.firstChild; if (element) { expect(element.nodeName).toBe('DIV'); } }); it('has styled component class', () => { const { container } = render(); const element = container.firstChild as HTMLElement; expect(element.className).toMatch(/sc-/); }); it('accepts className prop', () => { const { container } = render(); const element = container.firstChild as HTMLElement; expect(element).toHaveClass('custom'); }); }); describe('SkeletonPrice', () => { it('renders correctly', () => { const { container } = render(); const element = container.firstChild; expect(element).toBeInTheDocument(); }); it('renders as a div element', () => { const { container } = render(); const element = container.firstChild; if (element) { expect(element.nodeName).toBe('DIV'); } }); it('has styled component class', () => { const { container } = render(); const element = container.firstChild as HTMLElement; expect(element.className).toMatch(/sc-/); }); it('can be used multiple times', () => { const { container } = render( <> ); const elements = container.querySelectorAll('div'); expect(elements.length).toBe(3); }); }); describe('SkeletonButton', () => { it('renders correctly', () => { const { container } = render(); const element = container.firstChild; expect(element).toBeInTheDocument(); }); it('renders as div when specified', () => { const { container } = render(); const element = container.firstChild; if (element) { expect(element.nodeName).toBe('DIV'); } }); it('has styled component class', () => { const { container } = render(); const element = container.firstChild as HTMLElement; expect(element.className).toMatch(/sc-/); }); it('accepts additional props', () => { const { container } = render( ); const element = container.firstChild; expect(element).toHaveAttribute('data-testid', 'skeleton-button'); }); it('is not interactive', () => { const { container } = render(); const element = container.firstChild; if (element) { expect(element.nodeName).toBe('DIV'); } }); }); describe('Skeleton Components Integration', () => { it('all skeleton components render together', () => { const { container } = render(
); // Verify all components are present (4 skeleton components + 1 wrapper div = 5 divs minimum) const elements = container.querySelectorAll('div'); expect(elements.length).toBeGreaterThanOrEqual(5); }); it('skeleton components maintain consistent styling', () => { const { container } = render(
); const styledElements = container.querySelectorAll('[class*="sc-"]'); expect(styledElements.length).toBeGreaterThanOrEqual(3); }); it('skeleton components are div elements by default', () => { const { container } = render(
); const divs = Array.from(container.querySelectorAll('div')); expect(divs.length).toBeGreaterThanOrEqual(4); }); it('props are correctly applied to skeleton components', () => { const { container } = render(
); const elements = container.querySelectorAll('div'); expect(elements.length).toBeGreaterThanOrEqual(2); }); }); describe('Styled Components Structure', () => { it('SkeletonLine has correct structure', () => { const { container } = render(); expect(container.firstChild).toBeTruthy(); }); it('SkeletonHeadline has correct structure', () => { const { container } = render(); expect(container.firstChild).toBeTruthy(); }); it('SkeletonPrice has correct structure', () => { const { container } = render(); expect(container.firstChild).toBeTruthy(); }); it('SkeletonButton has correct structure', () => { const { container } = render(); expect(container.firstChild).toBeTruthy(); }); }); describe('Props and Variants', () => { it('SkeletonLine with different widths', () => { const { rerender, container } = render(); expect(container.firstChild).toBeInTheDocument(); rerender(); expect(container.firstChild).toBeInTheDocument(); rerender(); expect(container.firstChild).toBeInTheDocument(); }); it('SkeletonLine with different margins', () => { const { rerender, container } = render( ); expect(container.firstChild).toBeInTheDocument(); rerender(); expect(container.firstChild).toBeInTheDocument(); rerender(); expect(container.firstChild).toBeInTheDocument(); }); }); });