232 lines
6.9 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
}); |