Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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>();
        }
Пример #4
0
        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();
        }