public void ShouldCreateAndReturnDepositObject() { // Arrange var depositName = "FD20171219"; var settlementKey = "aaabbb111222"; var amount = "1000"; var settlementEventDto = new SettlementEventDto { Key = settlementKey, TotalAmount = new AmountDto { Amount = amount } }; var mpDeposits = new List <MpDeposit> { new MpDeposit(), new MpDeposit() }; _depositRepository.Setup(r => r.GetDepositNamesByDepositName(It.IsAny <string>())).Returns(mpDeposits); // Act var result = _fixture.CreateDeposit(settlementEventDto, depositName); // Assert Assert.Equal(settlementKey, result.ProcessorTransferId); Assert.Equal(Decimal.Parse(amount), result.DepositTotalAmount); Assert.Equal(result.DepositName, depositName + "002"); }
public IActionResult ProcessPaymentEvent([FromBody] SettlementEventDto settlementEventDto) { try { _paymentEventService.CreateDeposit(settlementEventDto); return(Ok()); } catch (Exception ex) { return(StatusCode(400, ex)); } }
public DepositDto CreateDeposit(SettlementEventDto settlementEventDto, string depositName) { var existingDeposits = _depositRepository.GetDepositNamesByDepositName(depositName); // append a number to the deposit, based on how many deposits already exist by that name // with the datetime and deposit type if (existingDeposits.Count < 10) { depositName = depositName + "00" + existingDeposits.Count; } else if (existingDeposits.Count >= 10 && existingDeposits.Count < 100) { depositName = depositName + "0" + existingDeposits.Count; } else if (existingDeposits.Count >= 100 && existingDeposits.Count < 999) { depositName = depositName + existingDeposits.Count; } else if (existingDeposits.Count >= 1000) { throw new Exception("Over 999 deposits for same time period"); } // limit deposit name to 15 chars or less to comply with GP export if (depositName.Length > 14) { var truncateValue = depositName.Length - 14; depositName = depositName.Remove(0, truncateValue); } var depositDto = new DepositDto { // Account number must be non-null, and non-empty; using a single space to fulfill this requirement AccountNumber = " ", BatchCount = 1, DepositDateTime = DateTime.Now, DepositName = depositName, DepositTotalAmount = Decimal.Parse(settlementEventDto.TotalAmount.Amount), DepositAmount = Decimal.Parse(settlementEventDto.TotalAmount.Amount), Exported = false, Notes = null, ProcessorTransferId = settlementEventDto.Key }; return(depositDto); }
public void CreateDeposit(SettlementEventDto settlementEventDto) { // TODO: Verify logger is working once we get to testing //_logger.LogInformation($"Processing transfer.paid event for transfer id: {settlementEventDto.Key}"); // 1. Check to see if the deposit has already been created. If we do throw an exception. var existingDeposit = _depositService.GetDepositByProcessorTransferId(settlementEventDto.Key); if (existingDeposit != null) { //_logger.LogError($"Deposit already exists for settlement: {settlementEventDto.Key}"); throw new Exception($"Deposit already exists for settlement: {settlementEventDto.Key}"); } // 2. Get all payments associated with a settlement from Pushpay's API. Throw an exception // if none are found. var settlementPayments = _pushpayService.GetChargesForTransfer(settlementEventDto.Key); if (settlementPayments.items == null || settlementPayments.items.Count <= 0) { //_logger.LogError($"No charges found for settlement: {settlementEventDto.Key}"); throw new Exception($"No charges found for settlement: {settlementEventDto.Key}"); } // 3. Create and Save the Batch to MP. var donationBatch = _batchService.CreateDonationBatch(settlementPayments.items, settlementEventDto.Name, DateTime.Now, settlementEventDto.Key); var savedDonationBatch = _batchService.SaveDonationBatch(donationBatch); donationBatch.Id = savedDonationBatch.Id; // 4. Update all the donations to have a status of deposited and to be part of the new batch. var updateDonations = _donationService.SetDonationStatus(donationBatch.Donations, donationBatch.Id); _donationService.Update(updateDonations); // 5. Create Deposit with the associated batch (should be one batch for one deposit) var deposit = _depositService.CreateDeposit(settlementEventDto, settlementEventDto.Name); deposit = _depositService.SaveDeposit(deposit); // 6. Update batch with deposit id and name and resave donationBatch.DepositId = deposit.Id; donationBatch.BatchName = deposit.DepositName + "D"; _batchService.UpdateDonationBatch(donationBatch); }
public void ShouldTruncateDepositNameOverFifteenChars() { // Arrange var depositName = "ABCDEFGHIJKLMNO"; var settlementKey = "aaabbb111222"; var amount = "1000"; var settlementEventDto = new SettlementEventDto { Key = settlementKey, TotalAmount = new AmountDto { Amount = amount } }; var mpDeposits = new List <MpDeposit> { new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), new MpDeposit(), }; _depositRepository.Setup(r => r.GetDepositNamesByDepositName(It.IsAny <string>())).Returns(mpDeposits); // Act var result = _fixture.CreateDeposit(settlementEventDto, depositName); // Assert Assert.Equal(settlementKey, result.ProcessorTransferId); Assert.Equal(Decimal.Parse(amount), result.DepositTotalAmount); Assert.Equal("EFGHIJKLMNO" + "011", result.DepositName); Assert.True(14 >= result.DepositName.Length); }