Files
gridpilot.gg/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.test.ts
2026-01-24 00:52:27 +01:00

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);
});
});
});