import { describe, it, expect } from 'vitest'; import { AdminUsersViewDataBuilder } from './AdminUsersViewDataBuilder'; import type { UserListResponseDTO } from '@/lib/types/generated/UserListResponseDTO'; describe('AdminUsersViewDataBuilder', () => { describe('happy paths', () => { it('should transform UserListResponseDTO to AdminUsersViewData correctly', () => { const userListResponse: UserListResponseDTO = { users: [ { id: 'user-1', email: 'admin@example.com', displayName: 'Admin User', roles: ['admin', 'owner'], status: 'active', isSystemAdmin: true, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z', lastLoginAt: '2024-01-20T10:00:00.000Z', primaryDriverId: 'driver-123', }, { id: 'user-2', email: 'user@example.com', displayName: 'Regular User', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-05T00:00:00.000Z', updatedAt: '2024-01-10T08:00:00.000Z', lastLoginAt: '2024-01-18T14:00:00.000Z', primaryDriverId: 'driver-456', }, ], total: 2, page: 1, limit: 10, totalPages: 1, }; const result = AdminUsersViewDataBuilder.build(userListResponse); expect(result.users).toHaveLength(2); expect(result.users[0]).toEqual({ id: 'user-1', email: 'admin@example.com', displayName: 'Admin User', roles: ['admin', 'owner'], status: 'active', isSystemAdmin: true, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z', lastLoginAt: '2024-01-20T10:00:00.000Z', primaryDriverId: 'driver-123', }); expect(result.total).toBe(2); }); it('should calculate derived fields correctly', () => { const userListResponse: UserListResponseDTO = { users: [ { id: 'user-1', email: 'user1@example.com', displayName: 'User 1', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z', }, { id: 'user-2', email: 'user2@example.com', displayName: 'User 2', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-02T00:00:00.000Z', updatedAt: '2024-01-16T12:00:00.000Z', }, { id: 'user-3', email: 'user3@example.com', displayName: 'User 3', roles: ['admin'], status: 'suspended', isSystemAdmin: true, createdAt: '2024-01-03T00:00:00.000Z', updatedAt: '2024-01-17T12:00:00.000Z', }, ], total: 3, page: 1, limit: 10, totalPages: 1, }; const result = AdminUsersViewDataBuilder.build(userListResponse); expect(result.activeUserCount).toBe(2); expect(result.adminCount).toBe(1); }); }); });