/**
* 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();
});
});