import { render, screen } from '@testing-library/react'; import { describe, it, expect } from 'vitest'; import { Progress } from './progress'; describe('Progress Component', () => { it('renders progress bar', () => { render(); const progressBar = screen.getByRole('progressbar'); expect(progressBar).toBeInTheDocument(); }); it('displays correct percentage', () => { render(); const fill = document.querySelector('.h-full'); expect(fill).toHaveStyle({ width: '75%' }); }); it('renders with default variant', () => { render(); const progressBar = screen.getByRole('progressbar'); expect(progressBar).toBeInTheDocument(); }); it('renders gaming variant', () => { render(); const progressBar = screen.getByRole('progressbar'); expect(progressBar).toBeInTheDocument(); }); it('renders with labels', () => { render(); expect(screen.getByText('0%')).toBeInTheDocument(); expect(screen.getByText('100%')).toBeInTheDocument(); }); it('handles different colors', () => { const { rerender } = render(); let fill = document.querySelector('.bg-primary'); expect(fill).toBeInTheDocument(); rerender(); fill = document.querySelector('.bg-destructive'); expect(fill).toBeInTheDocument(); rerender(); fill = document.querySelector('.bg-success'); expect(fill).toBeInTheDocument(); rerender(); fill = document.querySelector('.bg-warning'); expect(fill).toBeInTheDocument(); }); it('clamps value between 0 and 100', () => { const { rerender } = render(); let fill = document.querySelector('.h-full'); expect(fill).toHaveStyle({ width: '100%' }); rerender(); fill = document.querySelector('.h-full'); expect(fill).toHaveStyle({ width: '0%' }); }); it('handles custom max value', () => { render(); const fill = document.querySelector('.h-full'); expect(fill).toHaveStyle({ width: '25%' }); // 50/200 = 25% }); it('applies custom className', () => { render(); const progressBar = screen.getByRole('progressbar'); expect(progressBar).toHaveClass('custom-progress'); }); });