import { classes } from '@automapper/classes'; import { AutomapperModule } from '@automapper/nestjs'; import { Test, TestingModule } from '@nestjs/testing'; import { UserMessager } from '../../adapters/secondaries/user.messager'; import { UsersRepository } from '../../adapters/secondaries/users.repository'; import { CreateUserCommand } from '../../commands/create-user.command'; import { CreateUserRequest } from '../../domain/dtos/create-user.request'; import { User } from '../../domain/entities/user'; import { CreateUserUseCase } from '../../domain/usecases/create-user.usecase'; import { UserProfile } from '../../mappers/user.profile'; const newUserRequest: CreateUserRequest = { firstName: 'John', lastName: 'Doe', email: 'john.doe@email.com', phone: '0601020304', }; const newUserCommand: CreateUserCommand = new CreateUserCommand(newUserRequest); const mockUsersRepository = { create: jest.fn().mockResolvedValue({ ...newUserRequest, uuid: 'bb281075-1b98-4456-89d6-c643d3044a91', }), }; const mockUserMessager = { publish: jest.fn().mockImplementation(), }; describe('CreateUserUseCase', () => { let createUserUseCase: CreateUserUseCase; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [AutomapperModule.forRoot({ strategyInitializer: classes() })], providers: [ { provide: UsersRepository, useValue: mockUsersRepository, }, CreateUserUseCase, UserProfile, { provide: UserMessager, useValue: mockUserMessager, }, ], }).compile(); createUserUseCase = module.get(CreateUserUseCase); }); it('should be defined', () => { expect(createUserUseCase).toBeDefined(); }); describe('execute', () => { it('should create and return a new user', async () => { const newUser: User = await createUserUseCase.execute(newUserCommand); expect(newUser.lastName).toBe(newUserRequest.lastName); expect(newUser.uuid).toBeDefined(); }); }); });