public async Task ShouldDeleteUserAccountCorrectly() { //Arrange User user = new User("test", "test", "test", "test"); var dateDeleted = new DateTime(); var usersRepository = new Mock <IUsersRepository>(); usersRepository.Setup(x => x.Get(It.IsAny <Guid>())) .Returns(user); usersRepository.Setup(x => x.UpdateAsync(It.IsAny <User>())) .Callback <User>(x => { user = x; dateDeleted = user.ChangedAt; }) .Returns(Task.CompletedTask); var deleteUserHandler = new DeleteUserHandler(usersRepository.Object); var command = new DeleteUserCommand(user.Id); //Act await deleteUserHandler.HandleAsync(command); //Assert usersRepository.Verify(x => x.Get(It.IsAny <Guid>()), Times.Once); usersRepository.Verify(x => x.UpdateAsync(It.IsAny <User>()), Times.Once); Assert.That(user.IsDeleted); Assert.That(user.ChangedAt, Is.EqualTo(dateDeleted)); }
public void UpdatesUserInRepository_RaisesIntegrationEvent() { var user = new Domain.User(Id, "A B", "*****@*****.**", false); var repository = new Mock <IUserRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(user.Id)).Returns(Task.FromResult(user)).Verifiable(); repository.Setup(r => r.DeleteAsync(user)).Returns(Task.CompletedTask).Verifiable(); repository.Setup(r => r.SaveChanges()).Returns(Task.CompletedTask).Verifiable(); var busPublisher = new Mock <IBusPublisher>(MockBehavior.Strict); busPublisher.Setup(p => p.Publish <IUserDeleted>(It.Is <IUserDeleted>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var handler = new DeleteUserHandler(repository.Object, busPublisher.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); repository.Verify(); busPublisher.Verify(); }