public async Task <IIdentifierResult> HandleAsync(ICreateManualStockOperation command, ICorrelationContext context) { await Task.WhenAll( _stockItemVerifier.AssertExists(command.StockItemId), _userVerifier.AssertExists(command.CreatedByUserId) ); var manualStockOp = new Domain.ManualStockOperation(command.Id, command.StockItemId, command.Quantity, command.CreatedByUserId, command.Comment); await _repository.AddAsync(manualStockOp); try { await _repository.SaveChanges(); } catch (EntityAlreadyExistsException) { throw new BaristaException("manual_stock_operation_already_exists", $"A manual stock operation with the ID '{command.Id}' already exists."); } await _busPublisher.Publish(new ManualStockOperationCreated(manualStockOp.Id, manualStockOp.StockItemId, manualStockOp.Quantity, manualStockOp.CreatedByUserId, manualStockOp.Comment)); return(new IdentifierResult(manualStockOp.Id)); }
public void UpdatesStockOperationInRepository_RaisesIntegrationEvent() { var stockOperation = new Domain.ManualStockOperation(Id, Guid.Empty, 1, Guid.Empty, string.Empty); var repository = new Mock <IStockOperationRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(stockOperation.Id)).Returns(Task.FromResult <Domain.StockOperation>(stockOperation)).Verifiable(); repository.Setup(r => r.UpdateAsync(stockOperation)).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 <IManualStockOperationUpdated>(It.Is <IManualStockOperationUpdated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var siVerifier = new Mock <IStockItemVerifier>(MockBehavior.Strict); siVerifier.Setup(v => v.AssertExists(StockItemId)).Returns(Task.CompletedTask).Verifiable(); var userVerifier = new Mock <IUserVerifier>(MockBehavior.Strict); userVerifier.Setup(v => v.AssertExists(CreatedByUserId)).Returns(Task.CompletedTask).Verifiable(); var handler = new UpdateManualStockOperationHandler(repository.Object, busPublisher.Object, siVerifier.Object, userVerifier.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); repository.Verify(); busPublisher.Verify(); siVerifier.Verify(); userVerifier.Verify(); ValidateEquality(stockOperation); }