106 lines
3.3 KiB
TypeScript
106 lines
3.3 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|