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