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