Files
gridpilot.gg/apps/api/src/domain/admin/dtos/UserResponseDto.test.ts
2026-01-01 12:10:35 +01:00

232 lines
6.9 KiB
TypeScript

import { UserResponseDto } from './UserResponseDto';
describe('UserResponseDto', () => {
describe('TDD - Test First', () => {
it('should create valid DTO with all fields', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['owner', 'admin'];
dto.status = 'active';
dto.isSystemAdmin = true;
dto.createdAt = new Date('2024-01-01T00:00:00Z');
dto.updatedAt = new Date('2024-01-02T00:00:00Z');
dto.lastLoginAt = new Date('2024-01-03T00:00:00Z');
dto.primaryDriverId = 'driver-456';
// Assert
expect(dto.id).toBe('user-123');
expect(dto.email).toBe('test@example.com');
expect(dto.displayName).toBe('Test User');
expect(dto.roles).toEqual(['owner', 'admin']);
expect(dto.status).toBe('active');
expect(dto.isSystemAdmin).toBe(true);
expect(dto.createdAt).toEqual(new Date('2024-01-01T00:00:00Z'));
expect(dto.updatedAt).toEqual(new Date('2024-01-02T00:00:00Z'));
expect(dto.lastLoginAt).toEqual(new Date('2024-01-03T00:00:00Z'));
expect(dto.primaryDriverId).toBe('driver-456');
});
it('should create DTO with required fields only', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['user'];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.id).toBe('user-123');
expect(dto.email).toBe('test@example.com');
expect(dto.displayName).toBe('Test User');
expect(dto.roles).toEqual(['user']);
expect(dto.status).toBe('active');
expect(dto.isSystemAdmin).toBe(false);
expect(dto.createdAt).toBeInstanceOf(Date);
expect(dto.updatedAt).toBeInstanceOf(Date);
expect(dto.lastLoginAt).toBeUndefined();
expect(dto.primaryDriverId).toBeUndefined();
});
it('should handle empty roles array', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = [];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.roles).toEqual([]);
});
it('should handle single role', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['admin'];
dto.status = 'active';
dto.isSystemAdmin = true;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.roles).toEqual(['admin']);
expect(dto.isSystemAdmin).toBe(true);
});
it('should handle suspended status', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['user'];
dto.status = 'suspended';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.status).toBe('suspended');
});
it('should handle deleted status', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['user'];
dto.status = 'deleted';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.status).toBe('deleted');
});
it('should handle very long display names', () => {
// Arrange
const longName = 'A'.repeat(100);
// Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = longName;
dto.roles = ['user'];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.displayName).toBe(longName);
});
it('should handle special characters in email', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test+tag@example.co.uk';
dto.displayName = 'Test User';
dto.roles = ['user'];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.email).toBe('test+tag@example.co.uk');
});
it('should handle unicode in display name', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Tëst Ñame';
dto.roles = ['user'];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.displayName).toBe('Tëst Ñame');
});
it('should handle UUID format for ID', () => {
// Arrange
const uuid = '550e8400-e29b-41d4-a716-446655440000';
// Act
const dto = new UserResponseDto();
dto.id = uuid;
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['user'];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
// Assert
expect(dto.id).toBe(uuid);
});
it('should handle numeric primary driver ID', () => {
// Arrange & Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['user'];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = new Date();
dto.updatedAt = new Date();
dto.primaryDriverId = '123456';
// Assert
expect(dto.primaryDriverId).toBe('123456');
});
it('should handle very old and very new dates', () => {
// Arrange
const oldDate = new Date('1970-01-01T00:00:00Z');
const newDate = new Date('2099-12-31T23:59:59Z');
// Act
const dto = new UserResponseDto();
dto.id = 'user-123';
dto.email = 'test@example.com';
dto.displayName = 'Test User';
dto.roles = ['user'];
dto.status = 'active';
dto.isSystemAdmin = false;
dto.createdAt = oldDate;
dto.updatedAt = newDate;
dto.lastLoginAt = newDate;
// Assert
expect(dto.createdAt).toEqual(oldDate);
expect(dto.updatedAt).toEqual(newDate);
expect(dto.lastLoginAt).toEqual(newDate);
});
});
});