public void UpdatesPointOfSaleInRepository_RaisesIntegrationEvent() { var pos = new Domain.PointOfSale(Id, "Old DN", Guid.Empty, Guid.Empty); var repository = new Mock <IPointOfSaleRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(pos.Id)).Returns(Task.FromResult(pos)).Verifiable(); repository.Setup(r => r.UpdateAsync(pos)).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 <IPointOfSaleUpdated>(It.Is <IPointOfSaleUpdated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var agVerifier = new Mock <IAccountingGroupVerifier>(MockBehavior.Strict); agVerifier.Setup(v => v.AssertExists(ParentAccountingGroupId)).Returns(Task.CompletedTask).Verifiable(); var ssVerifier = new Mock <ISaleStrategyVerifier>(MockBehavior.Strict); ssVerifier.Setup(v => v.AssertExists(SaleStrategyId)).Returns(Task.CompletedTask).Verifiable(); var handler = new UpdatePointOfSaleHandler(repository.Object, busPublisher.Object, agVerifier.Object, ssVerifier.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); repository.Verify(); busPublisher.Verify(); agVerifier.Verify(); ssVerifier.Verify(); ValidateEquality(pos); }
public void DeletesPointOfSaleFromRepository_RaisesIntegrationEvent() { var pos = new Domain.PointOfSale(Id, "Old DN", Guid.Empty, Guid.Empty); var repository = new Mock <IPointOfSaleRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(pos.Id)).Returns(Task.FromResult(pos)).Verifiable(); repository.Setup(r => r.DeleteAsync(pos)).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 <IPointOfSaleDeleted>(It.Is <IPointOfSaleDeleted>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var handler = new DeletePointOfSaleHandler(repository.Object, busPublisher.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); repository.Verify(); busPublisher.Verify(); }
public async Task <IIdentifierResult> HandleAsync(ICreatePointOfSale command, ICorrelationContext context) { await Task.WhenAll( _agVerifier.AssertExists(command.ParentAccountingGroupId), command.SaleStrategyId != null?_ssVerifier.AssertExists(command.SaleStrategyId.Value) : Task.CompletedTask ); var pointOfSale = new Domain.PointOfSale(command.Id, command.DisplayName, command.ParentAccountingGroupId, command.SaleStrategyId, command.Features ?? new string[0]); await _posRepository.AddAsync(pointOfSale); try { await _posRepository.SaveChanges(); } catch (EntityAlreadyExistsException) { throw new BaristaException("point_of_sale_already_exists", $"A point of sale with the ID '{command.Id}' already exists."); } await _busPublisher.Publish(new PointOfSaleCreated(pointOfSale.Id, pointOfSale.DisplayName, pointOfSale.ParentAccountingGroupId, pointOfSale.SaleStrategyId)); return(new IdentifierResult(pointOfSale.Id)); }