public void UpdatesStockItemInRepository_RaisesIntegrationEvent() { var stockItem = new Domain.StockItem(Id, "Old Display Name", Guid.Empty); var repository = new Mock <IStockItemRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(stockItem.Id)).Returns(Task.FromResult(stockItem)).Verifiable(); repository.Setup(r => r.UpdateAsync(stockItem)).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(It.Is <IStockItemUpdated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var posVerifier = new Mock <IPointOfSaleVerifier>(MockBehavior.Strict); posVerifier.Setup(v => v.AssertExists(PosId)).Returns(Task.CompletedTask).Verifiable(); var handler = new UpdateStockItemHandler(repository.Object, busPublisher.Object, posVerifier.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); repository.Verify(); busPublisher.Verify(); posVerifier.Verify(); ValidateEquality(stockItem); }
public async Task <IIdentifierResult> HandleAsync(ICreateStockItem command, ICorrelationContext context) { await _posVerifier.AssertExists(command.PointOfSaleId); var stockItem = new Domain.StockItem(command.Id, command.DisplayName, command.PointOfSaleId); await _repository.AddAsync(stockItem); try { await _repository.SaveChanges(); } catch (EntityAlreadyExistsException) { throw new BaristaException("stock_item_already_exists", $"A stock item with the ID '{command.Id}' already exists."); } await _busPublisher.Publish(new StockItemCreated(stockItem.Id, stockItem.DisplayName, stockItem.PointOfSaleId)); return(new IdentifierResult(stockItem.Id)); }