core tests

This commit is contained in:
2026-01-24 01:53:04 +01:00
parent 5e12570442
commit 78c9c1ec75
4 changed files with 2155 additions and 0 deletions

View File

@@ -0,0 +1,610 @@
import { describe, expect, it } from 'vitest';
import { AdminUserOrmEntity } from './AdminUserOrmEntity';
describe('AdminUserOrmEntity', () => {
describe('TDD - Test First', () => {
describe('entity properties', () => {
it('should have id property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('id');
});
it('should have email property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('email');
});
it('should have displayName property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('displayName');
});
it('should have roles property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('roles');
});
it('should have status property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('status');
});
it('should have primaryDriverId property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('primaryDriverId');
});
it('should have lastLoginAt property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('lastLoginAt');
});
it('should have createdAt property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('createdAt');
});
it('should have updatedAt property', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity).toHaveProperty('updatedAt');
});
});
describe('property types', () => {
it('should have id as string', () => {
// Arrange
const entity = new AdminUserOrmEntity();
entity.id = 'test-id';
// Act & Assert
expect(typeof entity.id).toBe('string');
expect(entity.id).toBe('test-id');
});
it('should have email as string', () => {
// Arrange
const entity = new AdminUserOrmEntity();
entity.email = 'test@example.com';
// Act & Assert
expect(typeof entity.email).toBe('string');
expect(entity.email).toBe('test@example.com');
});
it('should have displayName as string', () => {
// Arrange
const entity = new AdminUserOrmEntity();
entity.displayName = 'Test User';
// Act & Assert
expect(typeof entity.displayName).toBe('string');
expect(entity.displayName).toBe('Test User');
});
it('should have roles as string array', () => {
// Arrange
const entity = new AdminUserOrmEntity();
entity.roles = ['admin', 'user'];
// Act & Assert
expect(Array.isArray(entity.roles)).toBe(true);
expect(entity.roles).toEqual(['admin', 'user']);
});
it('should have status as string', () => {
// Arrange
const entity = new AdminUserOrmEntity();
entity.status = 'active';
// Act & Assert
expect(typeof entity.status).toBe('string');
expect(entity.status).toBe('active');
});
it('should have primaryDriverId as optional string', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity.primaryDriverId).toBeUndefined();
entity.primaryDriverId = 'driver-123';
expect(typeof entity.primaryDriverId).toBe('string');
expect(entity.primaryDriverId).toBe('driver-123');
});
it('should have lastLoginAt as optional Date', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
expect(entity.lastLoginAt).toBeUndefined();
const now = new Date();
entity.lastLoginAt = now;
expect(entity.lastLoginAt).toBeInstanceOf(Date);
expect(entity.lastLoginAt).toBe(now);
});
it('should have createdAt as Date', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
entity.createdAt = now;
// Act & Assert
expect(entity.createdAt).toBeInstanceOf(Date);
expect(entity.createdAt).toBe(now);
});
it('should have updatedAt as Date', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
entity.updatedAt = now;
// Act & Assert
expect(entity.updatedAt).toBeInstanceOf(Date);
expect(entity.updatedAt).toBe(now);
});
});
describe('property values', () => {
it('should handle valid UUID for id', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const uuid = '123e4567-e89b-12d3-a456-426614174000';
// Act
entity.id = uuid;
// Assert
expect(entity.id).toBe(uuid);
});
it('should handle email with special characters', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const email = 'user+tag@example-domain.com';
// Act
entity.email = email;
// Assert
expect(entity.email).toBe(email);
});
it('should handle display name with spaces', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const displayName = 'John Doe Smith';
// Act
entity.displayName = displayName;
// Assert
expect(entity.displayName).toBe(displayName);
});
it('should handle roles with multiple entries', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const roles = ['owner', 'admin', 'user', 'moderator'];
// Act
entity.roles = roles;
// Assert
expect(entity.roles).toEqual(roles);
expect(entity.roles).toHaveLength(4);
});
it('should handle status with different values', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act & Assert
entity.status = 'active';
expect(entity.status).toBe('active');
entity.status = 'suspended';
expect(entity.status).toBe('suspended');
entity.status = 'deleted';
expect(entity.status).toBe('deleted');
});
it('should handle primaryDriverId with valid driver ID', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const driverId = 'driver-abc123';
// Act
entity.primaryDriverId = driverId;
// Assert
expect(entity.primaryDriverId).toBe(driverId);
});
it('should handle lastLoginAt with current date', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
// Act
entity.lastLoginAt = now;
// Assert
expect(entity.lastLoginAt).toBe(now);
});
it('should handle createdAt with specific date', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const specificDate = new Date('2024-01-01T00:00:00.000Z');
// Act
entity.createdAt = specificDate;
// Assert
expect(entity.createdAt).toBe(specificDate);
});
it('should handle updatedAt with specific date', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const specificDate = new Date('2024-01-02T00:00:00.000Z');
// Act
entity.updatedAt = specificDate;
// Assert
expect(entity.updatedAt).toBe(specificDate);
});
});
describe('property assignments', () => {
it('should allow setting all properties', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
// Act
entity.id = 'user-123';
entity.email = 'test@example.com';
entity.displayName = 'Test User';
entity.roles = ['admin'];
entity.status = 'active';
entity.primaryDriverId = 'driver-456';
entity.lastLoginAt = now;
entity.createdAt = now;
entity.updatedAt = now;
// Assert
expect(entity.id).toBe('user-123');
expect(entity.email).toBe('test@example.com');
expect(entity.displayName).toBe('Test User');
expect(entity.roles).toEqual(['admin']);
expect(entity.status).toBe('active');
expect(entity.primaryDriverId).toBe('driver-456');
expect(entity.lastLoginAt).toBe(now);
expect(entity.createdAt).toBe(now);
expect(entity.updatedAt).toBe(now);
});
it('should allow updating properties', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
const later = new Date(now.getTime() + 1000);
// Act
entity.id = 'user-123';
entity.email = 'test@example.com';
entity.displayName = 'Test User';
entity.roles = ['user'];
entity.status = 'active';
entity.primaryDriverId = 'driver-456';
entity.lastLoginAt = now;
entity.createdAt = now;
entity.updatedAt = now;
// Update
entity.displayName = 'Updated Name';
entity.roles = ['admin', 'user'];
entity.status = 'suspended';
entity.lastLoginAt = later;
entity.updatedAt = later;
// Assert
expect(entity.displayName).toBe('Updated Name');
expect(entity.roles).toEqual(['admin', 'user']);
expect(entity.status).toBe('suspended');
expect(entity.lastLoginAt).toBe(later);
expect(entity.updatedAt).toBe(later);
});
it('should allow clearing optional properties', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
// Act
entity.primaryDriverId = 'driver-123';
entity.lastLoginAt = now;
// Clear
entity.primaryDriverId = undefined;
entity.lastLoginAt = undefined;
// Assert
expect(entity.primaryDriverId).toBeUndefined();
expect(entity.lastLoginAt).toBeUndefined();
});
});
describe('empty entity', () => {
it('should create entity with undefined properties', () => {
// Arrange & Act
const entity = new AdminUserOrmEntity();
// Assert
expect(entity.id).toBeUndefined();
expect(entity.email).toBeUndefined();
expect(entity.displayName).toBeUndefined();
expect(entity.roles).toBeUndefined();
expect(entity.status).toBeUndefined();
expect(entity.primaryDriverId).toBeUndefined();
expect(entity.lastLoginAt).toBeUndefined();
expect(entity.createdAt).toBeUndefined();
expect(entity.updatedAt).toBeUndefined();
});
it('should allow partial initialization', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act
entity.id = 'user-123';
entity.email = 'test@example.com';
// Assert
expect(entity.id).toBe('user-123');
expect(entity.email).toBe('test@example.com');
expect(entity.displayName).toBeUndefined();
expect(entity.roles).toBeUndefined();
});
});
describe('real-world scenarios', () => {
it('should handle complete user entity', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
// Act
entity.id = '123e4567-e89b-12d3-a456-426614174000';
entity.email = 'admin@example.com';
entity.displayName = 'Administrator';
entity.roles = ['owner', 'admin'];
entity.status = 'active';
entity.primaryDriverId = 'driver-789';
entity.lastLoginAt = now;
entity.createdAt = now;
entity.updatedAt = now;
// Assert
expect(entity.id).toBe('123e4567-e89b-12d3-a456-426614174000');
expect(entity.email).toBe('admin@example.com');
expect(entity.displayName).toBe('Administrator');
expect(entity.roles).toEqual(['owner', 'admin']);
expect(entity.status).toBe('active');
expect(entity.primaryDriverId).toBe('driver-789');
expect(entity.lastLoginAt).toBe(now);
expect(entity.createdAt).toBe(now);
expect(entity.updatedAt).toBe(now);
});
it('should handle user without primary driver', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
// Act
entity.id = 'user-456';
entity.email = 'user@example.com';
entity.displayName = 'Regular User';
entity.roles = ['user'];
entity.status = 'active';
entity.createdAt = now;
entity.updatedAt = now;
// Assert
expect(entity.primaryDriverId).toBeUndefined();
expect(entity.lastLoginAt).toBeUndefined();
});
it('should handle suspended user', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
// Act
entity.id = 'user-789';
entity.email = 'suspended@example.com';
entity.displayName = 'Suspended User';
entity.roles = ['user'];
entity.status = 'suspended';
entity.createdAt = now;
entity.updatedAt = now;
// Assert
expect(entity.status).toBe('suspended');
});
it('should handle user with many roles', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
// Act
entity.id = 'user-999';
entity.email = 'multi@example.com';
entity.displayName = 'Multi Role User';
entity.roles = ['owner', 'admin', 'user', 'moderator', 'viewer'];
entity.status = 'active';
entity.createdAt = now;
entity.updatedAt = now;
// Assert
expect(entity.roles).toHaveLength(5);
expect(entity.roles).toContain('owner');
expect(entity.roles).toContain('admin');
expect(entity.roles).toContain('user');
expect(entity.roles).toContain('moderator');
expect(entity.roles).toContain('viewer');
});
it('should handle user with recent login', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
const recentLogin = new Date(now.getTime() - 60000); // 1 minute ago
// Act
entity.id = 'user-111';
entity.email = 'active@example.com';
entity.displayName = 'Active User';
entity.roles = ['user'];
entity.status = 'active';
entity.primaryDriverId = 'driver-222';
entity.lastLoginAt = recentLogin;
entity.createdAt = now;
entity.updatedAt = now;
// Assert
expect(entity.lastLoginAt).toBe(recentLogin);
expect(entity.lastLoginAt!.getTime()).toBeLessThan(now.getTime());
});
it('should handle user with old login', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const now = new Date();
const oldLogin = new Date(now.getTime() - 86400000); // 1 day ago
// Act
entity.id = 'user-333';
entity.email = 'old@example.com';
entity.displayName = 'Old Login User';
entity.roles = ['user'];
entity.status = 'active';
entity.lastLoginAt = oldLogin;
entity.createdAt = now;
entity.updatedAt = now;
// Assert
expect(entity.lastLoginAt).toBe(oldLogin);
expect(entity.lastLoginAt!.getTime()).toBeLessThan(now.getTime());
});
});
describe('edge cases', () => {
it('should handle empty string values', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act
entity.id = '';
entity.email = '';
entity.displayName = '';
entity.status = '';
// Assert
expect(entity.id).toBe('');
expect(entity.email).toBe('');
expect(entity.displayName).toBe('');
expect(entity.status).toBe('');
});
it('should handle empty roles array', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act
entity.roles = [];
// Assert
expect(entity.roles).toEqual([]);
expect(entity.roles).toHaveLength(0);
});
it('should handle null values for optional properties', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act
entity.primaryDriverId = null as any;
entity.lastLoginAt = null as any;
// Assert
expect(entity.primaryDriverId).toBeNull();
expect(entity.lastLoginAt).toBeNull();
});
it('should handle very long strings', () => {
// Arrange
const entity = new AdminUserOrmEntity();
const longString = 'a'.repeat(1000);
// Act
entity.email = `${longString}@example.com`;
entity.displayName = longString;
// Assert
expect(entity.email).toBe(`${longString}@example.com`);
expect(entity.displayName).toBe(longString);
});
it('should handle unicode characters', () => {
// Arrange
const entity = new AdminUserOrmEntity();
// Act
entity.email = '用户@例子.测试';
entity.displayName = '用户 例子';
// Assert
expect(entity.email).toBe('用户@例子.测试');
expect(entity.displayName).toBe('用户 例子');
});
});
});
});

View File

@@ -0,0 +1,521 @@
import { describe, expect, it } from 'vitest';
import { TypeOrmAdminSchemaError } from './TypeOrmAdminSchemaError';
describe('TypeOrmAdminSchemaError', () => {
describe('TDD - Test First', () => {
describe('constructor', () => {
it('should create an error with all required details', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid format',
message: 'Email must be a valid email address',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.name).toBe('TypeOrmAdminSchemaError');
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Invalid format - Email must be a valid email address');
});
it('should create an error with minimal details', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'id',
reason: 'Missing',
message: 'ID field is required',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.id: Missing - ID field is required');
});
it('should create an error with complex entity name', () => {
// Arrange
const details = {
entityName: 'AdminUserOrmEntity',
fieldName: 'roles',
reason: 'Type mismatch',
message: 'Expected simple-json but got text',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUserOrmEntity.roles: Type mismatch - Expected simple-json but got text');
});
it('should create an error with long field name', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'veryLongFieldNameThatExceedsNormalLength',
reason: 'Constraint violation',
message: 'Field length exceeds maximum allowed',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.veryLongFieldNameThatExceedsNormalLength: Constraint violation - Field length exceeds maximum allowed');
});
it('should create an error with special characters in message', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Validation failed',
message: 'Email "test@example.com" contains invalid characters: @, ., com',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Validation failed - Email "test@example.com" contains invalid characters: @, ., com');
});
it('should create an error with empty reason', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: '',
message: 'Email is required',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: - Email is required');
});
it('should create an error with empty message', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: '',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Invalid - ');
});
it('should create an error with empty reason and message', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: '',
message: '',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: - ');
});
});
describe('error properties', () => {
it('should have correct error name', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.name).toBe('TypeOrmAdminSchemaError');
});
it('should be instance of Error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error instanceof Error).toBe(true);
expect(error instanceof TypeOrmAdminSchemaError).toBe(true);
});
it('should have a stack trace', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.stack).toBeDefined();
expect(typeof error.stack).toBe('string');
expect(error.stack).toContain('TypeOrmAdminSchemaError');
});
it('should preserve details object reference', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toBe(details);
});
it('should allow modification of details after creation', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
const error = new TypeOrmAdminSchemaError(details);
// Act
error.details.reason = 'Updated reason';
// Assert
expect(error.details.reason).toBe('Updated reason');
expect(error.message).toContain('Updated reason');
});
});
describe('message formatting', () => {
it('should format message with all parts', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Validation failed',
message: 'Email must be a valid email address',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Validation failed - Email must be a valid email address');
});
it('should handle multiple words in entity name', () => {
// Arrange
const details = {
entityName: 'Admin User Entity',
fieldName: 'email',
reason: 'Invalid',
message: 'Test',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.message).toBe('[TypeOrmAdminSchemaError] Admin User Entity.email: Invalid - Test');
});
it('should handle multiple words in field name', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email address',
reason: 'Invalid',
message: 'Test',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email address: Invalid - Test');
});
it('should handle multiple words in reason', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Validation failed completely',
message: 'Test',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Validation failed completely - Test');
});
it('should handle multiple words in message', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'This is a very long error message that contains many words',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Invalid - This is a very long error message that contains many words');
});
it('should handle special characters in all parts', () => {
// Arrange
const details = {
entityName: 'Admin_User-Entity',
fieldName: 'email@address',
reason: 'Validation failed: @, ., com',
message: 'Email "test@example.com" is invalid',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.message).toBe('[TypeOrmAdminSchemaError] Admin_User-Entity.email@address: Validation failed: @, ., com - Email "test@example.com" is invalid');
});
});
describe('error inheritance', () => {
it('should be instance of Error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error instanceof Error).toBe(true);
});
it('should be instance of TypeOrmAdminSchemaError', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error instanceof TypeOrmAdminSchemaError).toBe(true);
});
it('should not be instance of other error types', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Invalid',
message: 'Test error',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error instanceof TypeError).toBe(false);
expect(error instanceof RangeError).toBe(false);
expect(error instanceof ReferenceError).toBe(false);
});
});
describe('real-world scenarios', () => {
it('should handle missing column error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'primaryDriverId',
reason: 'Column not found',
message: 'Column "primary_driver_id" does not exist in table "admin_users"',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.primaryDriverId: Column not found - Column "primary_driver_id" does not exist in table "admin_users"');
});
it('should handle type mismatch error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'roles',
reason: 'Type mismatch',
message: 'Expected type "simple-json" but got "text" for column "roles"',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.roles: Type mismatch - Expected type "simple-json" but got "text" for column "roles"');
});
it('should handle constraint violation error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Constraint violation',
message: 'UNIQUE constraint failed: admin_users.email',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Constraint violation - UNIQUE constraint failed: admin_users.email');
});
it('should handle nullable constraint error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'displayName',
reason: 'Constraint violation',
message: 'NOT NULL constraint failed: admin_users.display_name',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.displayName: Constraint violation - NOT NULL constraint failed: admin_users.display_name');
});
it('should handle foreign key constraint error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'primaryDriverId',
reason: 'Constraint violation',
message: 'FOREIGN KEY constraint failed: admin_users.primary_driver_id references drivers.id',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.primaryDriverId: Constraint violation - FOREIGN KEY constraint failed: admin_users.primary_driver_id references drivers.id');
});
it('should handle index creation error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'email',
reason: 'Index creation failed',
message: 'Failed to create unique index on column "email"',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.email: Index creation failed - Failed to create unique index on column "email"');
});
it('should handle default value error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'status',
reason: 'Default value error',
message: 'Default value "active" is not valid for column "status"',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.status: Default value error - Default value "active" is not valid for column "status"');
});
it('should handle timestamp column error', () => {
// Arrange
const details = {
entityName: 'AdminUser',
fieldName: 'createdAt',
reason: 'Type error',
message: 'Column "created_at" has invalid type "datetime" for PostgreSQL',
};
// Act
const error = new TypeOrmAdminSchemaError(details);
// Assert
expect(error.details).toEqual(details);
expect(error.message).toBe('[TypeOrmAdminSchemaError] AdminUser.createdAt: Type error - Column "created_at" has invalid type "datetime" for PostgreSQL');
});
});
});
});