示例#1
0
        public async Task When_AddPaymentCommand_Get_Subscription_Corresponding_To_CreditCard()
        {
            var subId      = CreditCardSubscriptionId.NewId();
            var creditCard = new CreditCard(CreditCardId.NewId(), subId, DateTimeOffset.Now);

            var repo = A.Fake <IAggregateRepository <CreditCard> >();

            A.CallTo(() => repo.GetByIdAsync(creditCard.Id))
            .Returns(creditCard);
            var subRepository = A.Fake <IAggregateRepository <CreditCardSubscription> >();
            var sub           = new CreditCardSubscription(subId, DateTimeOffset.Now, new CreditCardSubscriptionName("gold"));

            sub.UseNoPaymentFee(DateTimeOffset.Now);
            A.CallTo(subRepository)
            .WithReturnType <Task <CreditCardSubscription> >()
            .Returns(sub);

            var sut = new AddPaymentCommandHandler(repo, subRepository);
            await sut.Handle(new AddPaymentCommand
            {
                AggregateId = creditCard.Id,
                Payment     = new Payment(PaymentId.NewId(), Money.CreateAUD(200), DateTimeOffset.Now)
            }, CancellationToken.None);

            A.CallTo(() => subRepository.GetByIdAsync(subId))
            .MustHaveHappenedOnceExactly();

            A.CallTo(() => repo.SaveAsync(A <CreditCard> ._, A <long> ._))
            .MustHaveHappenedOnceExactly();
        }
        public async Task Execute_WhenCommandValid_CallsAquiringBankService()
        {
            const int MERCHANT_ID = 4;

            AddBankPaymentCommand addBankPaymentCommand = null;
            var aquiringBankService = new Mock <MockAquiringBankService>();

            aquiringBankService
            .Setup(m => m.MakePaymentAsync(It.IsAny <AddBankPaymentCommand>()))
            .Callback <AddBankPaymentCommand>(c => addBankPaymentCommand = c)
            .CallBase();

            var userSessionService = new Mock <IUserSessionService>();

            userSessionService
            .Setup(m => m.GetCurrentMerchantId())
            .Returns(MERCHANT_ID);

            var handler = new AddPaymentCommandHandler(
                NullLogger <AddPaymentCommandHandler> .Instance,
                aquiringBankService.Object,
                userSessionService.Object,
                new InMemoryPaymentsRepository(NullLogger <InMemoryPaymentsRepository> .Instance)
                );

            var command = AddPaymentCommandValidatorTests.CreateValidCommand();

            await handler.ExecuteAsync(command);

            Assert.Equal(command.CreditCard, addBankPaymentCommand.CreditCard);
            Assert.Equal(MERCHANT_ID, addBankPaymentCommand.MerchantId);
            Assert.True(addBankPaymentCommand.PaymentId > 0);
        }
        public void AddPayment_CorrectAttributes_Success(int _clientId, string _paymentId)
        {
            var testSessionToken = SessionRepository.StartNewSession(_clientId);

            DatabaseQueryProcessor.Erase();
            Shared.FillTheDatabase();

            var addPaymentCommand = new AddPaymentCommand
            {
                sessionToken = testSessionToken,
                paymentId    = _paymentId
            };

            var lastOrder = DatabaseQueryProcessor.GetTheMostRecentOrder(_clientId);
            var total     = DatabaseQueryProcessor.GetTotal(lastOrder.orderId);

            var isSuccessfulPayment = PaymentMethod.Check(_paymentId, total);
            var handler             = new AddPaymentCommandHandler();
            var result = (SuccessInfoDto)handler.Handle(addPaymentCommand);

            DatabaseQueryProcessor.Erase();

            SessionRepository.RemoveSession(testSessionToken);
            Assert.IsTrue(result.isSuccess);
            Assert.IsTrue(isSuccessfulPayment);
        }
 public PaymentsController(
     GetPaymentDetailsByPaymentIdQueryHandler getPaymentDetailsByTokenQueryHandler,
     AddPaymentCommandHandler addPaymentCommandHandler
     )
 {
     _getPaymentDetailsByTokenQueryHandler = getPaymentDetailsByTokenQueryHandler;
     _addPaymentCommandHandler             = addPaymentCommandHandler;
 }
        public Task Execute_WhenCommandInvalid_ThrowsException()
        {
            var handler = new AddPaymentCommandHandler(
                NullLogger <AddPaymentCommandHandler> .Instance,
                new MockAquiringBankService(),
                new MockUserSessionService(),
                new InMemoryPaymentsRepository(NullLogger <InMemoryPaymentsRepository> .Instance)
                );

            var command = AddPaymentCommandValidatorTests.CreateValidCommand();

            command.Currency = null;

            return(Assert.ThrowsAsync <ValidationException>(() => handler.ExecuteAsync(command)));
        }
        public void AddPayment_IncorrectClientId_Exception(int _clientId)
        {
            var testSessionToken = SessionRepository.StartNewSession(_clientId);

            var addPaymentCommand = new AddPaymentCommand
            {
                sessionToken = testSessionToken,
                paymentId    = "PAY-2RR93057JR3600055LQ5FWMA"
            };

            var          handler = new AddPaymentCommandHandler();
            TestDelegate result  = () => handler.Handle(addPaymentCommand);

            SessionRepository.RemoveSession(testSessionToken);

            Assert.Throws <Exception>(result);
        }
        public async Task Execute_WhenCommandValid_PaymentSavedToRepository()
        {
            var paymentRepository = new InMemoryPaymentsRepository(NullLogger <InMemoryPaymentsRepository> .Instance);

            var handler = new AddPaymentCommandHandler(
                NullLogger <AddPaymentCommandHandler> .Instance,
                new MockAquiringBankService(),
                new MockUserSessionService(),
                paymentRepository
                );

            var command = AddPaymentCommandValidatorTests.CreateValidCommand();
            var result  = await handler.ExecuteAsync(command);

            var paymentDetails = await paymentRepository.GetPaymentDetailsByPaymentIdAsync(result.PaymentId);

            Assert.NotNull(paymentDetails);
        }
        public void AddPayment_ClientHasNoOrders_Success(int _clientId, string _paymentId)
        {
            var testSessionToken = SessionRepository.StartNewSession(_clientId);

            DatabaseQueryProcessor.Erase();
            Shared.FillTheDatabase();

            var addPaymentCommand = new AddPaymentCommand
            {
                sessionToken = testSessionToken,
                paymentId    = _paymentId
            };

            var          handler = new AddPaymentCommandHandler();
            TestDelegate result  = () => handler.Handle(addPaymentCommand);

            SessionRepository.RemoveSession(testSessionToken);

            Assert.Throws <Exception>(result);
        }