public async Task ArrangeAsync()
        {
            var today = new DateTime(2021, 1, 30);

            _fixture = new Fixture();

            _collectionPeriods = new List <Domain.ValueObjects.CollectionCalendarPeriod>()
            {
                new CollectionCalendarPeriod(
                    new Domain.ValueObjects.CollectionPeriod(1, (short)today.Year),
                    (byte)today.Month,
                    (short)today.Year,
                    today.AddDays(-1),
                    today.AddDays(-1),
                    false,
                    false),
                new CollectionCalendarPeriod(
                    new Domain.ValueObjects.CollectionPeriod(1, (short)today.AddMonths(1).Year),
                    (byte)today.AddMonths(1).Month,
                    (short)today.AddMonths(1).Year,
                    today.AddMonths(1).AddDays(-1),
                    today.AddMonths(1).AddDays(-1),
                    false,
                    false)
            };
            _firstCollectionPeriod = _collectionPeriods.First().CollectionPeriod;

            _mockIncentiveDomainRespository      = new Mock <IApprenticeshipIncentiveDomainRepository>();
            _mockCollectionCalendarService       = new Mock <ICollectionCalendarService>();
            _mockIncentivePaymentProfilesService = new Mock <IIncentivePaymentProfilesService>();

            _incentive = await ApprenticeshipIncentiveCreator();

            _sut = new CreatePaymentCommandHandler(_mockIncentiveDomainRespository.Object);
        }
        public async Task ShouldSavePaymentToDatabaseEvenIfBankAcquirerDoesNotSucceed()
        {
            var acquiringBankResult = Result.Failure <Guid>(FakeAcquiringBankErrors.AmountMustBeLessThan10000);

            _mockAcquiringBankService.Setup(a => a.ProcessPayment(It.IsAny <Payment>())).ReturnsAsync(acquiringBankResult);

            var sut = new CreatePaymentCommandHandler(_mockAcquiringBankService.Object,
                                                      _mockPaymentHistoryRepository.Object, _mockMetrics.Object, _mockLogger.Object,
                                                      _mockEventStoreClient.Object);

            var command = new CreatePaymentCommand()
            {
                Amount      = 44044.44M,
                Currency    = Currency.GBP.ToString(),
                CardNumber  = "1234-5678-8765-4321",
                CVV         = 321,
                ExpiryMonth = 10,
                ExpiryYear  = 20,
                FirstName   = "Jim",
                Surname     = "Jimson"
            };

            var result = await sut.Handle(command, default);

            _mockAcquiringBankService.Verify(a => a.ProcessPayment(It.IsAny <Payment>()), Times.Once());
            _mockPaymentHistoryRepository.Verify(p => p.InsertPayment(It.IsAny <Payment>()), Times.Once());
            Assert.False(result.IsSuccess);
        }
        public async Task ShouldSendPaymentToAcquiringBankAndSaveInDB()
        {
            var acquiringBankResult = Result.Ok(Guid.NewGuid());

            _mockAcquiringBankService.Setup(a => a.ProcessPayment(It.IsAny <Payment>())).ReturnsAsync(acquiringBankResult);
            _mockPaymentHistoryRepository.Setup(p => p.InsertPayment(It.IsAny <Payment>())).ReturnsAsync(Result.Ok(Guid.NewGuid()));

            var sut = new CreatePaymentCommandHandler(_mockAcquiringBankService.Object,
                                                      _mockPaymentHistoryRepository.Object, _mockMetrics.Object,
                                                      _mockLogger.Object, _mockEventStoreClient.Object);

            var command = new CreatePaymentCommand()
            {
                Amount      = 4404.44M,
                Currency    = Currency.GBP.ToString(),
                CardNumber  = "1234-5678-8765-4321",
                CVV         = 321,
                ExpiryMonth = 10,
                ExpiryYear  = 20,
                FirstName   = "Jim",
                Surname     = "Jimson"
            };

            var result = await sut.Handle(command, default);

            _mockAcquiringBankService.Verify(a => a.ProcessPayment(It.IsAny <Payment>()), Times.Once());
            _mockPaymentHistoryRepository.Verify(p => p.InsertPayment(It.IsAny <Payment>()), Times.Once());
            Assert.True(result.IsSuccess);
        }
        public CreatePaymentCommandTest()
        {
            _createdDateUtc    = DateTimeOffset.UtcNow;
            _transactionUid    = Guid.NewGuid();
            _paymentRepository = new Mock <IPaymentRepository>();

            var systemClock = new Mock <ISystemClock>();

            systemClock.Setup(d => d.UtcNow).Returns(_createdDateUtc);
            _bank = new Mock <IBank>();
            _sut  = new CreatePaymentCommandHandler(_paymentRepository.Object, _bank.Object, systemClock.Object);
        }
예제 #5
0
        public void Handle_GivenMoreThanBalanceAmount_ShouldCreateClosedPayment()
        {
            var sut     = new CreatePaymentCommandHandler(_context, _mediator.Object, CurrentUser);
            var request = new CreatePaymentCommand
            {
                Amount = 100000,
                Date   = DateTime.Now
            };

            var result = sut.Handle(request, CancellationToken.None).Result;

            Assert.AreNotEqual(Guid.Empty, result);
            var record = _context.Payments.SingleOrDefault(i => i.Id == result);

            Assert.IsNotNull(record);
            Assert.AreEqual(PaymentStatus.Closed, record.Status);
        }
예제 #6
0
        public async Task Handle_ShouldPersistPayment()
        {
            var command = new CreatePaymentCommand
            {
                Name = "Do yet another thing."
            };

            var sut = new CreatePaymentCommandHandler(_repository);

            var result = await sut.Handle(command, CancellationToken.None);

            var entity = await _repository.GetByIdAsync(result);

            entity.Should().NotBeNull();
            entity.Name.Should().Be(command.Name);
            entity.IsComplete.Should().BeFalse();
        }