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); }