Files
trackgo-be/src/modules/configuration/employees/employees-write.controller.spec.ts
T
shancheas 790725e227 Enhance employee and user management with linked user functionality
- Introduced `EmployeeUserWrite` type to manage user details associated with employees.
- Updated `EmployeesService` and `EmployeesRepository` to support user assignment and retrieval by user ID.
- Enhanced DTOs to include user information for employee creation and updates.
- Implemented validation to ensure proper handling of user data during employee operations.
- Added unit and e2e tests to validate the new functionality and ensure data integrity in user-employee relationships.
- Modified existing controllers to accommodate the new user linkage features in employee management.
2026-08-27 12:22:25 +07:00

86 lines
2.7 KiB
TypeScript

import { Test, TestingModule } from '@nestjs/testing';
import { EmployeesWriteController } from './employees-write.controller';
import { EmployeesService } from './employees.service';
const createDto = {
code: 'EMP_01',
name: 'Ada Lovelace',
phone: '+6281234567890',
position: 'sales',
};
describe('EmployeesWriteController', () => {
let controller: EmployeesWriteController;
const service = {
create: jest.fn(),
update: jest.fn(),
updateStatus: jest.fn(),
delete: jest.fn(),
bulkDelete: jest.fn(),
bulkUpdateStatus: jest.fn(),
importCsv: jest.fn(),
};
beforeEach(async () => {
jest.clearAllMocks();
const moduleRef: TestingModule = await Test.createTestingModule({
controllers: [EmployeesWriteController],
providers: [{ provide: EmployeesService, useValue: service }],
}).compile();
controller = moduleRef.get(EmployeesWriteController);
});
it('create passes dto fields and user id', async () => {
service.create.mockResolvedValue({ id: 'emp-1' });
await controller.create(createDto, 'user-1');
expect(service.create).toHaveBeenCalledWith({
...createDto,
status: undefined,
userId: 'user-1',
assignedUserId: undefined,
user: undefined,
});
});
it('update, updateStatus, and delete delegate', async () => {
service.update.mockResolvedValue({ id: 'emp-1' });
service.updateStatus.mockResolvedValue({ id: 'emp-1' });
service.delete.mockResolvedValue(undefined);
await controller.update('emp-1', { name: 'Ada Lovelace' }, 'user-1');
await controller.updateStatus('emp-1', { status: 'active' }, 'user-1');
await controller.delete('emp-1');
expect(service.updateStatus).toHaveBeenCalledWith(
'emp-1',
'active',
'user-1',
);
expect(service.delete).toHaveBeenCalledWith('emp-1');
});
it('bulk and import delegate', async () => {
service.bulkDelete.mockResolvedValue({ deleted: 1 });
service.bulkUpdateStatus.mockResolvedValue({ updated: 1 });
service.importCsv.mockResolvedValue({ imported: 1 });
await controller.bulkDelete({ ids: ['emp-1'] });
await controller.bulkStatus(
{ ids: ['emp-1'], status: 'archived' },
'user-1',
);
await controller.importCsv(
{
buffer: Buffer.from(
'code,name,phone,position\nEMP_01,Ada,+6281234567890,sales',
),
},
'user-1',
);
expect(service.importCsv).toHaveBeenCalled();
});
it('importCsv uses empty string when file is missing', async () => {
service.importCsv.mockResolvedValue({ imported: 0 });
await controller.importCsv(undefined, 'user-1');
expect(service.importCsv).toHaveBeenCalledWith('', 'user-1');
});
});