/** * UserStatsSummary Component Tests * * Tests for the UserStatsSummary component that displays summary statistics * for user management. */ import React from 'react'; import { render, screen } from '@testing-library/react'; import { UserStatsSummary } from './UserStatsSummary'; import { describe, it, expect, vi } from 'vitest'; // Mock the MetricCard component vi.mock('@/ui/MetricCard', () => ({ MetricCard: ({ label, value, icon, intent }: any) => (
{label} {value} {icon && Icon}
), })); // Mock the StatGrid component vi.mock('@/ui/StatGrid', () => ({ StatGrid: ({ stats, columns }: any) => (
{stats.map((stat: any, index: number) => (
{stat.label} {stat.value} {stat.icon && Icon} {stat.intent && {stat.intent}}
))}
), })); describe('UserStatsSummary', () => { it('should render with all stats', () => { render( ); expect(screen.getByText('Total Users')).toBeTruthy(); expect(screen.getByText('100')).toBeTruthy(); expect(screen.getByText('Active')).toBeTruthy(); expect(screen.getByText('80')).toBeTruthy(); expect(screen.getByText('Admins')).toBeTruthy(); expect(screen.getByText('10')).toBeTruthy(); }); it('should render with zero values', () => { render( ); expect(screen.getByText('Total Users')).toBeTruthy(); expect(screen.getByText('0')).toBeTruthy(); expect(screen.getByText('Active')).toBeTruthy(); expect(screen.getByText('0')).toBeTruthy(); expect(screen.getByText('Admins')).toBeTruthy(); expect(screen.getByText('0')).toBeTruthy(); }); it('should render with large numbers', () => { render( ); expect(screen.getByText('12345')).toBeTruthy(); expect(screen.getByText('9876')).toBeTruthy(); expect(screen.getByText('123')).toBeTruthy(); }); it('should render with single digit numbers', () => { render( ); expect(screen.getByText('5')).toBeTruthy(); expect(screen.getByText('3')).toBeTruthy(); expect(screen.getByText('1')).toBeTruthy(); }); it('should render with negative numbers (edge case)', () => { render( ); expect(screen.getByText('-5')).toBeTruthy(); expect(screen.getByText('-3')).toBeTruthy(); expect(screen.getByText('-1')).toBeTruthy(); }); it('should render with decimal numbers', () => { render( ); expect(screen.getByText('100.5')).toBeTruthy(); expect(screen.getByText('75.25')).toBeTruthy(); expect(screen.getByText('10.75')).toBeTruthy(); }); it('should render with very large numbers', () => { render( ); expect(screen.getByText('1000000')).toBeTruthy(); expect(screen.getByText('750000')).toBeTruthy(); expect(screen.getByText('50000')).toBeTruthy(); }); it('should render with string numbers', () => { render( ); expect(screen.getByText('100')).toBeTruthy(); expect(screen.getByText('80')).toBeTruthy(); expect(screen.getByText('10')).toBeTruthy(); }); it('should render with mixed number types', () => { render( ); expect(screen.getByText('100')).toBeTruthy(); expect(screen.getByText('80')).toBeTruthy(); expect(screen.getByText('10')).toBeTruthy(); }); });