Beispiel #1
0
        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);
        }