import { classes } from '@automapper/classes'; import { AutomapperModule } from '@automapper/nestjs'; import { Test, TestingModule } from '@nestjs/testing'; import { LoggingMessager } from '../../adapters/secondaries/logging.messager'; import { UserMessager } from '../../adapters/secondaries/user.messager'; import { UsersRepository } from '../../adapters/secondaries/users.repository'; import { UpdateUserCommand } from '../../commands/update-user.command'; import { UpdateUserRequest } from '../../domain/dtos/update-user.request'; import { User } from '../../domain/entities/user'; import { UpdateUserUseCase } from '../../domain/usecases/update-user.usecase'; import { UserProfile } from '../../mappers/user.profile'; const originalUser: User = new User(); originalUser.uuid = 'bb281075-1b98-4456-89d6-c643d3044a91'; originalUser.lastName = 'Doe'; const updateUserRequest: UpdateUserRequest = { uuid: 'bb281075-1b98-4456-89d6-c643d3044a91', lastName: 'Dane', }; const updateUserCommand: UpdateUserCommand = new UpdateUserCommand( updateUserRequest, ); const mockUsersRepository = { update: jest.fn().mockImplementation((uuid: string, params: any) => { originalUser.lastName = params.lastName; return Promise.resolve(originalUser); }), }; const mockMessager = { publish: jest.fn().mockImplementation(), }; describe('UpdateUserUseCase', () => { let updateUserUseCase: UpdateUserUseCase; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [AutomapperModule.forRoot({ strategyInitializer: classes() })], providers: [ { provide: UsersRepository, useValue: mockUsersRepository, }, UpdateUserUseCase, UserProfile, { provide: UserMessager, useValue: mockMessager, }, { provide: LoggingMessager, useValue: mockMessager, }, ], }).compile(); updateUserUseCase = module.get(UpdateUserUseCase); }); it('should be defined', () => { expect(updateUserUseCase).toBeDefined(); }); describe('execute', () => { it('should update a user', async () => { const updatedUser: User = await updateUserUseCase.execute( updateUserCommand, ); expect(updatedUser.lastName).toBe(updateUserRequest.lastName); }); }); });