155 lines
4.6 KiB
TypeScript
155 lines
4.6 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { AdminDashboardViewDataBuilder } from './AdminDashboardViewDataBuilder';
|
|
import type { DashboardStats } from '@/lib/types/admin';
|
|
|
|
describe('AdminDashboardViewDataBuilder', () => {
|
|
describe('happy paths', () => {
|
|
it('should transform DashboardStats DTO to AdminDashboardViewData correctly', () => {
|
|
const dashboardStats: DashboardStats = {
|
|
totalUsers: 1000,
|
|
activeUsers: 800,
|
|
suspendedUsers: 50,
|
|
deletedUsers: 150,
|
|
systemAdmins: 5,
|
|
recentLogins: 120,
|
|
newUsersToday: 15,
|
|
};
|
|
|
|
const result = AdminDashboardViewDataBuilder.build(dashboardStats);
|
|
|
|
expect(result).toEqual({
|
|
stats: {
|
|
totalUsers: 1000,
|
|
activeUsers: 800,
|
|
suspendedUsers: 50,
|
|
deletedUsers: 150,
|
|
systemAdmins: 5,
|
|
recentLogins: 120,
|
|
newUsersToday: 15,
|
|
},
|
|
});
|
|
});
|
|
|
|
it('should handle zero values correctly', () => {
|
|
const dashboardStats: DashboardStats = {
|
|
totalUsers: 0,
|
|
activeUsers: 0,
|
|
suspendedUsers: 0,
|
|
deletedUsers: 0,
|
|
systemAdmins: 0,
|
|
recentLogins: 0,
|
|
newUsersToday: 0,
|
|
};
|
|
|
|
const result = AdminDashboardViewDataBuilder.build(dashboardStats);
|
|
|
|
expect(result).toEqual({
|
|
stats: {
|
|
totalUsers: 0,
|
|
activeUsers: 0,
|
|
suspendedUsers: 0,
|
|
deletedUsers: 0,
|
|
systemAdmins: 0,
|
|
recentLogins: 0,
|
|
newUsersToday: 0,
|
|
},
|
|
});
|
|
});
|
|
|
|
it('should handle large numbers correctly', () => {
|
|
const dashboardStats: DashboardStats = {
|
|
totalUsers: 1000000,
|
|
activeUsers: 750000,
|
|
suspendedUsers: 25000,
|
|
deletedUsers: 225000,
|
|
systemAdmins: 50,
|
|
recentLogins: 50000,
|
|
newUsersToday: 1000,
|
|
};
|
|
|
|
const result = AdminDashboardViewDataBuilder.build(dashboardStats);
|
|
|
|
expect(result.stats.totalUsers).toBe(1000000);
|
|
expect(result.stats.activeUsers).toBe(750000);
|
|
expect(result.stats.systemAdmins).toBe(50);
|
|
});
|
|
});
|
|
|
|
describe('data transformation', () => {
|
|
it('should preserve all DTO fields in the output', () => {
|
|
const dashboardStats: DashboardStats = {
|
|
totalUsers: 500,
|
|
activeUsers: 400,
|
|
suspendedUsers: 25,
|
|
deletedUsers: 75,
|
|
systemAdmins: 3,
|
|
recentLogins: 80,
|
|
newUsersToday: 10,
|
|
};
|
|
|
|
const result = AdminDashboardViewDataBuilder.build(dashboardStats);
|
|
|
|
expect(result.stats.totalUsers).toBe(dashboardStats.totalUsers);
|
|
expect(result.stats.activeUsers).toBe(dashboardStats.activeUsers);
|
|
expect(result.stats.suspendedUsers).toBe(dashboardStats.suspendedUsers);
|
|
expect(result.stats.deletedUsers).toBe(dashboardStats.deletedUsers);
|
|
expect(result.stats.systemAdmins).toBe(dashboardStats.systemAdmins);
|
|
expect(result.stats.recentLogins).toBe(dashboardStats.recentLogins);
|
|
expect(result.stats.newUsersToday).toBe(dashboardStats.newUsersToday);
|
|
});
|
|
|
|
it('should not modify the input DTO', () => {
|
|
const dashboardStats: DashboardStats = {
|
|
totalUsers: 100,
|
|
activeUsers: 80,
|
|
suspendedUsers: 5,
|
|
deletedUsers: 15,
|
|
systemAdmins: 2,
|
|
recentLogins: 20,
|
|
newUsersToday: 5,
|
|
};
|
|
|
|
const originalStats = { ...dashboardStats };
|
|
AdminDashboardViewDataBuilder.build(dashboardStats);
|
|
|
|
expect(dashboardStats).toEqual(originalStats);
|
|
});
|
|
});
|
|
|
|
describe('edge cases', () => {
|
|
it('should handle negative values (if API returns them)', () => {
|
|
const dashboardStats: DashboardStats = {
|
|
totalUsers: -1,
|
|
activeUsers: -1,
|
|
suspendedUsers: -1,
|
|
deletedUsers: -1,
|
|
systemAdmins: -1,
|
|
recentLogins: -1,
|
|
newUsersToday: -1,
|
|
};
|
|
|
|
const result = AdminDashboardViewDataBuilder.build(dashboardStats);
|
|
|
|
expect(result.stats.totalUsers).toBe(-1);
|
|
expect(result.stats.activeUsers).toBe(-1);
|
|
});
|
|
|
|
it('should handle very large numbers', () => {
|
|
const dashboardStats: DashboardStats = {
|
|
totalUsers: Number.MAX_SAFE_INTEGER,
|
|
activeUsers: Number.MAX_SAFE_INTEGER - 1000,
|
|
suspendedUsers: 100,
|
|
deletedUsers: 100,
|
|
systemAdmins: 10,
|
|
recentLogins: 1000,
|
|
newUsersToday: 100,
|
|
};
|
|
|
|
const result = AdminDashboardViewDataBuilder.build(dashboardStats);
|
|
|
|
expect(result.stats.totalUsers).toBe(Number.MAX_SAFE_INTEGER);
|
|
expect(result.stats.activeUsers).toBe(Number.MAX_SAFE_INTEGER - 1000);
|
|
});
|
|
});
|
|
});
|