public async Task GivenExistingProduct_WhenUpdateProductCommandSent_ThenProductUpdated() { var product = Product.Create(Guid.NewGuid(), "Old name", 10.99m); var command = new UpdateProduct(product.Id, "New name", 34.99m); repository.GetAsync(command.ProductId).Returns(product); await handler.HandleAsync(command); await repository.Received().UpdateAsync(product); }
public void AddsProductToRepository_RaisesIntegrationEvent() { var product = new Domain.Product(Id, "Product Name", null); var repository = new Mock <IProductRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(product.Id)).Returns(Task.FromResult(product)).Verifiable(); repository.Setup(r => r.UpdateAsync(product)).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 <IProductUpdated>(It.Is <IProductUpdated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var handler = new UpdateProductHandler(repository.Object, busPublisher.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); repository.Verify(); busPublisher.Verify(); ValidateEquality(product); }