import { Test, TestingModule } from '@nestjs/testing'; import { UserMessager } from '../../adapters/secondaries/user.messager'; import { UsersRepository } from '../../adapters/secondaries/users.repository'; import { DeleteUserCommand } from '../../commands/delete-user.command'; import { DeleteUserUseCase } from '../../domain/usecases/delete-user.usecase'; const mockUsers = [ { uuid: 'bb281075-1b98-4456-89d6-c643d3044a91', firstName: 'John', lastName: 'Doe', email: 'john.doe@email.com', phone: '0601020304', }, { uuid: 'bb281075-1b98-4456-89d6-c643d3044a92', firstName: 'Jane', lastName: 'Doe', email: 'jane.doe@email.com', phone: '0602030405', }, { uuid: 'bb281075-1b98-4456-89d6-c643d3044a93', firstName: 'Jimmy', lastName: 'Doe', email: 'jimmy.doe@email.com', phone: '0603040506', }, ]; const mockUsersRepository = { delete: jest.fn().mockImplementation((uuid: string) => { mockUsers.forEach((user, index) => { if (user.uuid === uuid) { mockUsers.splice(index, 1); return Promise.resolve(); } }); }), }; const mockUserMessager = { publish: jest.fn().mockImplementation(), }; describe('DeleteUserUseCase', () => { let deleteUserUseCase: DeleteUserUseCase; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [ { provide: UsersRepository, useValue: mockUsersRepository, }, DeleteUserUseCase, { provide: UserMessager, useValue: mockUserMessager, }, ], }).compile(); deleteUserUseCase = module.get(DeleteUserUseCase); }); it('should be defined', () => { expect(deleteUserUseCase).toBeDefined(); }); describe('execute', () => { it('should delete a user', async () => { const savedUuid = mockUsers[0].uuid; const deleteUserCommand = new DeleteUserCommand(savedUuid); await deleteUserUseCase.execute(deleteUserCommand); const deletedUser = mockUsers.find((user) => user.uuid === savedUuid); expect(deletedUser).toBeUndefined(); }); }); });