public void AddsSaleStateChangeToRepository_RaisesIntegrationEvent()
        {
            var sale = new Accounting.Domain.Sale(Cmd.ParentSaleId, 9, 9, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty);

            var repository = new Mock <ISalesRepository>(MockBehavior.Strict);

            repository.Setup(r => r.GetAsync(Cmd.ParentSaleId)).Returns(Task.FromResult(sale));
            repository.Setup(r => r.UpdateAsync(sale)).Returns(Task.CompletedTask).Verifiable();
            repository.Setup(r => r.SaveChanges()).Returns(Task.CompletedTask).Verifiable();

            var publisher = new Mock <IBusPublisher>(MockBehavior.Strict);

            publisher.Setup(p => p.Publish(It.Is <ISaleStateChangeCreated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable();

            var userVerifier = new Mock <IUserVerifier>(MockBehavior.Strict);

            userVerifier.Setup(v => v.AssertExists(CausedByUserId)).Returns(Task.CompletedTask).Verifiable();

            var posVerifier = new Mock <IPointOfSaleVerifier>(MockBehavior.Strict);

            posVerifier.Setup(v => v.AssertExists(CausedByPointOfSaleId)).Returns(Task.CompletedTask).Verifiable();

            var handler = new CreateSaleStateChangeHandler(repository.Object, publisher.Object, userVerifier.Object, posVerifier.Object);
            var result  = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult();

            Assert.IsTrue(result.Successful);

            ValidateEquality(sale.MostRecentStateChange);
            repository.Verify();
            publisher.Verify();
            userVerifier.Verify();
            posVerifier.Verify();
        }
Пример #2
0
 private bool IsExpectedSale(Accounting.Domain.Sale p)
 {
     Assert.AreEqual(Cmd.UserId, p.UserId);
     Assert.AreEqual(Cmd.Cost, p.Cost);
     Assert.AreEqual(Cmd.Quantity, p.Quantity);
     Assert.AreEqual(Cmd.AccountingGroupId, p.AccountingGroupId);
     Assert.AreEqual(Cmd.PointOfSaleId, p.PointOfSaleId);
     Assert.AreEqual(Cmd.AuthenticationMeansId, p.AuthenticationMeansId);
     Assert.AreEqual(Cmd.ProductId, p.ProductId);
     Assert.AreEqual(Cmd.OfferId, p.OfferId);
     return(true);
 }
Пример #3
0
        public void UpdatesSaleInRepository_RaisesIntegrationEvent()
        {
            var sale = new Accounting.Domain.Sale(Cmd.Id, 9, 9, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty);

            var repository = new Mock <ISalesRepository>(MockBehavior.Strict);

            repository.Setup(r => r.GetAsync(Cmd.Id)).Returns(Task.FromResult(sale));
            repository.Setup(r => r.UpdateAsync(sale)).Returns(Task.CompletedTask).Verifiable();
            repository.Setup(r => r.SaveChanges()).Returns(Task.CompletedTask).Verifiable();

            var publisher = new Mock <IBusPublisher>(MockBehavior.Strict);

            publisher.Setup(p => p.Publish(It.Is <ISaleUpdated>(e => IsExpectedEvent(e)))).Returns(Task.CompletedTask).Verifiable();

            var userVerifier = new Mock <IUserVerifier>(MockBehavior.Strict);

            userVerifier.Setup(v => v.AssertExists(Cmd.UserId)).Returns(Task.CompletedTask).Verifiable();

            var agVerifier = new Mock <IAccountingGroupVerifier>(MockBehavior.Strict);

            agVerifier.Setup(v => v.AssertExists(Cmd.AccountingGroupId)).Returns(Task.CompletedTask).Verifiable();

            var posVerifier = new Mock <IPointOfSaleVerifier>(MockBehavior.Strict);

            posVerifier.Setup(v => v.AssertExists(Cmd.PointOfSaleId)).Returns(Task.CompletedTask).Verifiable();

            var meansVerifier = new Mock <IAuthenticationMeansVerifier>(MockBehavior.Strict);

            meansVerifier.Setup(v => v.AssertExists(Cmd.AuthenticationMeansId)).Returns(Task.CompletedTask).Verifiable();

            var productVerifier = new Mock <IProductVerifier>(MockBehavior.Strict);

            productVerifier.Setup(v => v.AssertExists(Cmd.ProductId)).Returns(Task.CompletedTask).Verifiable();

            var offerVerifier = new Mock <IOfferVerifier>(MockBehavior.Strict);

            offerVerifier.Setup(v => v.AssertExists(Cmd.OfferId)).Returns(Task.CompletedTask).Verifiable();

            var handler = new UpdateSaleHandler(repository.Object, publisher.Object, agVerifier.Object, userVerifier.Object, posVerifier.Object, meansVerifier.Object, productVerifier.Object, offerVerifier.Object);
            var result  = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult();

            Assert.IsTrue(result.Successful);

            IsExpectedSale(sale);
            repository.Verify();
            publisher.Verify();
            userVerifier.Verify();
            agVerifier.Verify();
            posVerifier.Verify();
            meansVerifier.Verify();
            productVerifier.Verify();
            offerVerifier.Verify();
        }
Пример #4
0
        public void DeletesSaleFromRepository_RaisesIntegrationEvent()
        {
            var sale = new Accounting.Domain.Sale(SaleGuid, 1, 2, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty);

            var repository = new Mock <ISalesRepository>(MockBehavior.Strict);

            repository.Setup(r => r.GetAsync(sale.Id)).Returns(Task.FromResult(sale)).Verifiable();
            repository.Setup(r => r.DeleteAsync(sale)).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 <ISaleDeleted>(e => IsExpectedEvent(e)))).Returns(Task.CompletedTask).Verifiable();

            var handler = new DeleteSaleHandler(repository.Object, busPublisher.Object);
            var result  = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult();

            Assert.IsTrue(result.Successful);

            repository.Verify();
            busPublisher.Verify();
        }