public async Task <Guid> AddDonation(LiqPayCheckoutDto liqPayCheckoutDto) { var liqPayData = new LiqPayData(liqPayCheckoutDto.Data); var liqPaySignature = new LiqPaySignature(liqPayData, _liqPayKeys.PrivateKey); if (!await liqPaySignature.Validate(liqPayCheckoutDto.Signature)) { throw new InvalidArgumentException(nameof(liqPayCheckoutDto.Signature), "Invalid signature"); } var donation = liqPayData.Donation; var commissionModel = liqPayData.Commission; donation.Amount -= commissionModel.ReceiverCommission; donation.ProjectId = liqPayCheckoutDto.ProjectId; donation.SocietyId = liqPayCheckoutDto.SocietyId; donation.DonatorId = liqPayCheckoutDto.DonatorId; _unitOfWork.Repository <Donation>().Add(donation); await _unitOfWork.SaveChangesAsync(); return(donation.Id); }
public DonationServiceTests() { _testDb = GetTestData().ToList(); _validCheckout = new LiqPayCheckoutDto() { Data = "eyJhY3Rpb24iOiJwYXkiLCJwYXltZW50X2lkIjoxMjUzMTU2NzE2LCJzdGF0dXMiOiJzdWNjZXNzIiwidmVyc2lvbiI6MywidHlwZSI6ImJ1eSIsInBheXR5cGUiOiJjYXJkIiwicHVibGljX2tleSI6InNhbmRib3hfaTQyODU5OTk4OTE0IiwiYWNxX2lkIjo0MTQ5NjMsIm9yZGVyX2lkIjoiSElVQjY1QlQxNTgyNTU1MTQyMTYyMDY1IiwibGlxcGF5X29yZGVyX2lkIjoiMEpYTDZVU1ExNTgyNTU1MTUwMjgyNjM2IiwiZGVzY3JpcHRpb24iOiJibGFnb2RpeW5pc3QiLCJzZW5kZXJfY2FyZF9tYXNrMiI6IjQyNDI0Mio0MiIsInNlbmRlcl9jYXJkX2JhbmsiOiJUZXN0Iiwic2VuZGVyX2NhcmRfdHlwZSI6InZpc2EiLCJzZW5kZXJfY2FyZF9jb3VudHJ5Ijo4MDQsImlwIjoiMTk1LjE2MC4yMzIuMjQ4IiwiYW1vdW50IjoxMDAuMCwiY3VycmVuY3kiOiJVU0QiLCJzZW5kZXJfY29tbWlzc2lvbiI6MC4wLCJyZWNlaXZlcl9jb21taXNzaW9uIjoyLjc1LCJhZ2VudF9jb21taXNzaW9uIjowLjAsImFtb3VudF9kZWJpdCI6MjQ1MC45OCwiYW1vdW50X2NyZWRpdCI6MjQ1MC45OCwiY29tbWlzc2lvbl9kZWJpdCI6MC4wLCJjb21taXNzaW9uX2NyZWRpdCI6NjcuNCwiY3VycmVuY3lfZGViaXQiOiJVQUgiLCJjdXJyZW5jeV9jcmVkaXQiOiJVQUgiLCJzZW5kZXJfYm9udXMiOjAuMCwiYW1vdW50X2JvbnVzIjowLjAsIm1waV9lY2kiOiI3IiwiaXNfM2RzIjpmYWxzZSwibGFuZ3VhZ2UiOiJ1ayIsImNyZWF0ZV9kYXRlIjoxNTgyNTU1MTUwMjg0LCJlbmRfZGF0ZSI6MTU4MjU1NTE1MDg3MSwidHJhbnNhY3Rpb25faWQiOjEyNTMxNTY3MTZ9", Signature = "unholN06qwKFFl/LB3tc1qegq4E=" }; _liqPayKeysOptions = Options.Create(new LiqPayKeys() { PrivateKey = "testPrivateKey", PublicKey = "testPublicKey" }); var repoMock = new Mock <IRepository <Donation> >(); repoMock.Setup(r => r.Get(It.IsAny <Expression <Func <Donation, bool> > >())) .ReturnsAsync((Expression <Func <Donation, bool> > predicate) => _testDb .AsQueryable() .Where(predicate) .FirstOrDefault()); repoMock.Setup(r => r.Add(It.IsAny <Donation>())) .Callback((Donation donation) => { donation.Id = new Guid(); _testDb.Add(donation); }); _unitOfWorkMock = new Mock <IUnitOfWork>(); _unitOfWorkMock.Setup(u => u.Repository <Donation>()).Returns(repoMock.Object); _unitOfWorkMock.Setup(u => u.SaveChangesAsync()); _donationService = new DonationService(_unitOfWorkMock.Object, _liqPayKeysOptions); }
public async Task AddDonation_InvalidSignature() { var liqPayCheckout = new LiqPayCheckoutDto() { Data = "eyJwdWJsaWNfa2V5IjoidGVzdFB1YmxpY0tleSIsInZlcnNpb24iOjMsImFjdGlvbiI6InBheSIsImFtb3VudCI6MjAwLjAsImN1cnJlbmN5IjoidWFoIiwiZGVzY3JpcHRpb24iOiLQkdC70LDQs9C+0LTRltC50L3RltGB0YLRjCIsInJlc3VsdF91cmwiOiJ0ZXN0VXJsIiwic2VydmVyX3VybCI6InRlc3RVcmwvc2VydmVyIiwibGFuZ3VhZ2UiOiJ1ayJ9", Signature = "defNotAValidSignature", ProjectId = 1 }; Func <Task> act = async() => await _donationService.AddDonation(liqPayCheckout); await act.Should().ThrowAsync <InvalidArgumentException>(); }
public async Task TopUpBalance(LiqPayCheckoutDto liqPayCheckoutDto) { var liqPayData = new LiqPayData(liqPayCheckoutDto.Data); var liqPaySignature = new LiqPaySignature(liqPayData, _liqPayInfo.PrivateKey); if (!await liqPaySignature.Validate(liqPayCheckoutDto.Signature)) { throw new InvalidArgumentException(nameof(liqPayCheckoutDto.Signature), "Invalid signature"); } var user = await _unitOfWork.Repository <UserDetails>() .Get(i => i.UserDetailsId == liqPayCheckoutDto.MemberId); if (user == null) { throw new NotFoundException($"User with id {liqPayCheckoutDto.MemberId}"); } var donation = liqPayData.Donation; var commissionModel = liqPayData.Commission; donation.Amount -= commissionModel.ReceiverCommission; user.Balance += donation.Amount; var paymentHistory = new PaymentHistory() { Description = PaymentDescription.TopUp, Saldo = donation.Amount, UserId = (Guid)liqPayCheckoutDto.MemberId, CurrentBalance = user.Balance }; _unitOfWork.Repository <UserDetails>().Update(user); _unitOfWork.Repository <PaymentHistory>().Add(paymentHistory); await _unitOfWork.SaveChangesAsync(); }