90 lines
2.2 KiB
JavaScript
90 lines
2.2 KiB
JavaScript
// tests/unit/models/User.test.js
|
|
const User = require('../../../models/User');
|
|
|
|
describe('User Model', () => {
|
|
test('should create a new user with provided data', () => {
|
|
const userData = {
|
|
id: 'test-id',
|
|
email: 'test@example.com',
|
|
passwordHash: 'hashed_password',
|
|
firstName: 'John',
|
|
lastName: 'Doe',
|
|
userType: 'job-seeker',
|
|
tenantId: 'tenant1'
|
|
};
|
|
|
|
const user = User.create(userData);
|
|
|
|
expect(user.id).toBe('test-id');
|
|
expect(user.email).toBe('test@example.com');
|
|
expect(user.firstName).toBe('John');
|
|
expect(user.lastName).toBe('Doe');
|
|
expect(user.userType).toBe('job-seeker');
|
|
expect(user.tenantId).toBe('tenant1');
|
|
});
|
|
|
|
test('should generate ID if not provided', () => {
|
|
const userData = {
|
|
email: 'test@example.com',
|
|
passwordHash: 'hashed_password',
|
|
firstName: 'John',
|
|
lastName: 'Doe',
|
|
userType: 'job-seeker',
|
|
tenantId: 'tenant1'
|
|
};
|
|
|
|
const user = User.create(userData);
|
|
|
|
expect(user.id).toBeDefined();
|
|
expect(typeof user.id).toBe('string');
|
|
expect(user.id.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('should validate required fields', () => {
|
|
const user = new User(
|
|
'test-id',
|
|
'test@example.com',
|
|
'hashed_password',
|
|
'John',
|
|
'Doe',
|
|
'job-seeker',
|
|
'tenant1'
|
|
);
|
|
|
|
expect(() => user.validate()).not.toThrow();
|
|
});
|
|
|
|
test('should throw error if missing required fields', () => {
|
|
const user = new User();
|
|
|
|
expect(() => user.validate()).toThrow('Missing required fields');
|
|
});
|
|
|
|
test('should throw error for invalid email format', () => {
|
|
const user = new User(
|
|
'test-id',
|
|
'invalid-email',
|
|
'hashed_password',
|
|
'John',
|
|
'Doe',
|
|
'job-seeker',
|
|
'tenant1'
|
|
);
|
|
|
|
expect(() => user.validate()).toThrow('Invalid email format');
|
|
});
|
|
|
|
test('should throw error for invalid user type', () => {
|
|
const user = new User(
|
|
'test-id',
|
|
'test@example.com',
|
|
'hashed_password',
|
|
'John',
|
|
'Doe',
|
|
'invalid-type',
|
|
'tenant1'
|
|
);
|
|
|
|
expect(() => user.validate()).toThrow('User type must be either job-seeker or job-provider');
|
|
});
|
|
}); |