import React from 'react'; import { describe, it, expect } from 'vitest'; import { render } from '@testing-library/react'; import { PixelTimeline, PixelTimelineItem } from '../../data/PixelTimeline'; describe('PixelTimeline', () => { it('renders ol with li items', () => { const { container } = render( , ); const ol = container.querySelector('ol'); expect(ol).not.toBeNull(); const items = ol!.querySelectorAll('li'); expect(items.length).toBe(3); }); it('active=1 highlights second item', () => { const { container } = render( , ); const items = container.querySelectorAll('li'); expect(items[1].getAttribute('data-pxl-state')).toBe('active'); expect(items[0].getAttribute('data-pxl-state')).toBe('past'); expect(items[2].getAttribute('data-pxl-state')).toBe('upcoming'); expect(items[1].getAttribute('aria-current')).toBe('step'); }); it('bulletSize=lg applies large bullet', () => { const { container } = render( , ); const bullet = container.querySelector('[data-pxl-bullet]') as HTMLElement; expect(bullet).not.toBeNull(); expect(bullet.className).toMatch(/h-5|w-5/); }); it('item title and time render', () => { const { getByText } = render( , ); expect(getByText('Shipped v1')).toBeTruthy(); expect(getByText('2026-05-30')).toBeTruthy(); }); it('last item has no bottom connector', () => { const { container } = render( , ); const items = container.querySelectorAll('li'); const firstConnector = items[0].querySelector('[data-pxl-connector]'); const lastConnector = items[items.length - 1].querySelector('[data-pxl-connector]'); expect(firstConnector).not.toBeNull(); expect(lastConnector).toBeNull(); }); });