user/src/modules/users/tests/unit/delete-user.usecase.spec.ts

82 lines
2.1 KiB
TypeScript

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