/** * AdminStatsPanel Component Tests * * Tests for the AdminStatsPanel component that displays statistics * in a grid format for admin dashboards. */ import React from 'react'; import { render, screen } from '@testing-library/react'; import { AdminStatsPanel } from './AdminStatsPanel'; import { describe, it, expect, vi } from 'vitest'; import { Users, Shield, Activity } from 'lucide-react'; // Mock the StatGrid component vi.mock('@/ui/StatGrid', () => ({ StatGrid: ({ stats, columns }: any) => (
{stats.map((stat: any, index: number) => (
{stat.label} {stat.value} {stat.icon && {stat.icon.name || 'Icon'}} {stat.intent && {stat.intent}} {stat.trend && {stat.trend.value}}
))}
), })); describe('AdminStatsPanel', () => { it('should render with single stat', () => { const stats = [ { label: 'Total Users', value: '1,234', icon: Users, intent: 'primary' as const, }, ]; render(); expect(screen.getByText('Total Users')).toBeTruthy(); expect(screen.getByText('1,234')).toBeTruthy(); }); it('should render with multiple stats', () => { const stats = [ { label: 'Total Users', value: '1,234', icon: Users, intent: 'primary' as const, }, { label: 'Active Users', value: '892', icon: Activity, intent: 'success' as const, }, { label: 'Admins', value: '12', icon: Shield, intent: 'telemetry' as const, }, ]; render(); expect(screen.getByText('Total Users')).toBeTruthy(); expect(screen.getByText('1,234')).toBeTruthy(); expect(screen.getByText('Active Users')).toBeTruthy(); expect(screen.getByText('892')).toBeTruthy(); expect(screen.getByText('Admins')).toBeTruthy(); expect(screen.getByText('12')).toBeTruthy(); }); it('should render stats with trends', () => { const stats = [ { label: 'Growth', value: '15%', icon: Activity, intent: 'success' as const, trend: { value: 5, isPositive: true, }, }, ]; render(); expect(screen.getByText('Growth')).toBeTruthy(); expect(screen.getByText('15%')).toBeTruthy(); expect(screen.getByText('5')).toBeTruthy(); }); it('should render stats with different intents', () => { const stats = [ { label: 'Primary', value: '100', icon: Users, intent: 'primary' as const, }, { label: 'Success', value: '200', icon: Users, intent: 'success' as const, }, { label: 'Warning', value: '300', icon: Users, intent: 'warning' as const, }, { label: 'Critical', value: '400', icon: Users, intent: 'critical' as const, }, { label: 'Telemetry', value: '500', icon: Users, intent: 'telemetry' as const, }, ]; render(); expect(screen.getByText('Primary')).toBeTruthy(); expect(screen.getByText('Success')).toBeTruthy(); expect(screen.getByText('Warning')).toBeTruthy(); expect(screen.getByText('Critical')).toBeTruthy(); expect(screen.getByText('Telemetry')).toBeTruthy(); }); it('should render stats with numeric values', () => { const stats = [ { label: 'Count', value: 42, icon: Users, }, ]; render(); expect(screen.getByText('Count')).toBeTruthy(); expect(screen.getByText('42')).toBeTruthy(); }); it('should render stats with string values', () => { const stats = [ { label: 'Status', value: 'Active', icon: Shield, }, ]; render(); expect(screen.getByText('Status')).toBeTruthy(); expect(screen.getByText('Active')).toBeTruthy(); }); it('should render with empty stats array', () => { render(); // Should render without errors expect(document.body).toBeTruthy(); }); });