import { z } from 'zod';
import {
CreateEmployeeDTOSchema,
UpdateEmployeeDTOSchema,
SendInviteDTOSchema,
EmployeeDraftSchema
} from '../../src/schemas/employee-schemas';
describe('Employee Schemas', () => {
describe('CreateEmployeeDTOSchema', () => {
it('should validate valid employee data', () => {
const validEmployee = {
companyId: 'test-company',
lastName: 'Иванов',
firstName: 'Иван',
middleName: 'Иванович',
email: 'ivanov@test.com',
phones: ['+79123456789']
};
const result = CreateEmployeeDTOSchema.safeParse(validEmployee);
expect(result.success).toBe(true);
if (result.success) {
expect(result.data).toEqual(validEmployee);
}
});
it('should validate employee data without optional fields', () => {
const validEmployee = {
companyId: 'test-company',
lastName: 'Иванов',
firstName: 'Иван',
email: 'ivanov@test.com'
};
const result = CreateEmployeeDTOSchema.safeParse(validEmployee);
expect(result.success).toBe(true);
if (result.success) {
expect(result.data).toEqual(validEmployee);
}
});
it('should reject invalid email format', () => {
const invalidEmployee = {
companyId: 'test-company',
lastName: 'Иванов',
firstName: 'Иван',
email: 'invalid-email'
};
const result = CreateEmployeeDTOSchema.safeParse(invalidEmployee);
expect(result.success).toBe(false);
});
it('should reject missing required fields', () => {
const invalidEmployee = {
companyId: 'test-company',
lastName: 'Иванов'
// Missing firstName and email
};
const result = CreateEmployeeDTOSchema.safeParse(invalidEmployee);
expect(result.success).toBe(false);
});
});
describe('UpdateEmployeeDTOSchema', () => {
it('should validate partial employee data', () => {
const updateData = {
lastName: 'Петров',
firstName: 'Петр',
email: 'petrov@test.com'
};
const result = UpdateEmployeeDTOSchema.safeParse(updateData);
expect(result.success).toBe(true);
if (result.success) {
expect(result.data).toEqual(updateData);
}
});
it('should reject invalid email in update', () => {
const invalidUpdate = {
email: 'invalid-email'
};
const result = UpdateEmployeeDTOSchema.safeParse(invalidUpdate);
expect(result.success).toBe(false);
});
});
describe('SendInviteDTOSchema', () => {
it('should validate valid invite data', () => {
const validInvite = {
employeeId: '1',
email: 'ivanov@test.com'
};
const result = SendInviteDTOSchema.safeParse(validInvite);
expect(result.success).toBe(true);
if (result.success) {
expect(result.data).toEqual(validInvite);
}
});
it('should reject invalid email', () => {
const invalidInvite = {
employeeId: '1',
email: 'invalid-email'
};
const result = SendInviteDTOSchema.safeParse(invalidInvite);
expect(result.success).toBe(false);
});
});
describe('EmployeeDraftSchema', () => {
it('should validate employee draft data', () => {
const draft = {
lastName: 'Иванов',
firstName: 'Иван',
email: 'ivanov@test.com',
phones: ['+79123456789'],
isValid: true
};
const result = EmployeeDraftSchema.safeParse(draft);
expect(result.success).toBe(true);
if (result.success) {
expect(result.data).toEqual(draft);
}
});
it('should handle empty draft data', () => {
const draft = {
isValid: false
};
const result = EmployeeDraftSchema.safeParse(draft);
expect(result.success).toBe(true);
if (result.success) {
expect(result.data).toEqual(draft);
}
});
});
});