// @vitest-environment jsdom import { afterEach, describe, expect, test } from 'vitest'; import { cleanup, render, screen } from '@testing-library/react'; import StatCard from '../../components/ui/StatCard'; afterEach(() => cleanup()); describe('', () => { test('renders label and value', () => { render(); expect(screen.getByText('Total Cards')).toBeDefined(); expect(screen.getByText('2,458')).toBeDefined(); }); test('renders positive delta in green with up-arrow', () => { const { container } = render( ); const deltaEl = container.querySelector('[style*="34, 197, 94"]'); expect(deltaEl).not.toBeNull(); expect(container.textContent).toContain('+12.5%'); expect(container.textContent).toContain('▲'); }); test('renders negative delta in red with down-arrow', () => { const { container } = render( ); const deltaEl = container.querySelector('[style*="239, 68, 68"]'); expect(deltaEl).not.toBeNull(); expect(container.textContent).toContain('-2.1%'); expect(container.textContent).toContain('▼'); }); test('omits the delta row when delta prop is not provided', () => { const { container } = render( ); expect(container.textContent).not.toContain('▲'); expect(container.textContent).not.toContain('▼'); }); test('renders all 4 accent gradients without crashing', () => { for (const accent of ['gold', 'purple', 'blue', 'red']) { cleanup(); const { container } = render( ); expect(container.querySelector('[style*="linear-gradient"]')).not.toBeNull(); } }); test('renders subtitle when provided', () => { render( ); expect(screen.getByText('12.9% of collection')).toBeDefined(); }); });