public async Task GivenNonExistingProduct_WhenCreateProductCommandSent_ThenProductCreated()
        {
            var command = new CreateProduct(Guid.NewGuid(), "New name", 52.49m);

            repository.ExistsAsync(command.ProductId).Returns(false);

            await handler.HandleAsync(command);

            await repository.Received().AddAsync(Arg.Any <Product>());
        }
        public void AddsProductToRepository_RaisesIntegrationEvent()
        {
            var repository = new Mock <IProductRepository>(MockBehavior.Strict);

            repository.Setup(r => r.AddAsync(It.Is <Domain.Product>(p => ValidateEquality(p)))).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 <IProductCreated>(It.Is <IProductCreated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable();

            var handler = new CreateProductHandler(repository.Object, busPublisher.Object);
            var result  = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult();

            Assert.IsTrue(result.Successful);
            repository.Verify();
            busPublisher.Verify();
        }