Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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));
        }