예제 #1
0
        public void MakeDonation(KudosBasketDonationDTO donation)
        {
            lock (donateLock)
            {
                var user = _usersDbSet
                           .First(usr => usr.Id == donation.UserId);
                var basket = _kudosBasketsDbSet
                             .Include(b => b.KudosLogs)
                             .First(b => b.OrganizationId == donation.OrganizationId);

                _kudosBasketValidator.CheckIfBasketIsActive(basket);
                _kudosBasketValidator.CheckIfUserHasEnoughKudos(user.RemainingKudos, donation.DonationAmount);

                var otherType = _kudosTypesDbSet
                                .First(type => type.Type == ConstBusinessLayer.KudosTypeEnum.Other);
                var minusType = _kudosTypesDbSet
                                .First(type => type.Type == ConstBusinessLayer.KudosTypeEnum.Minus);

                var logComment = string.Format(Resources.Widgets.KudosBasket.KudosBasket.KudosBasketDonationComment, basket.Title);
                var noUser     = default(string);

                var plusLog  = CreateKudosLogForBasket(donation, otherType, logComment, user.Id);
                var minusLog = CreateKudosLogForBasket(donation, minusType, logComment, noUser);

                _kudosLogsDbSet.Add(minusLog);
                basket.KudosLogs.Add(plusLog);

                _uow.SaveChanges(false);

                _kudosService.UpdateProfileKudos(user, donation);
            }
        }
예제 #2
0
        public void Should_Create_Two_Kudos_Logs_On_Donation()
        {
            var donationDto = new KudosBasketDonationDTO
            {
                DonationAmount = 20,
                OrganizationId = 2,
                UserId         = "testUserId",
                Id             = 10
            };

            _kudosBasketService.MakeDonation(donationDto);
            _kudosLogsDbSet.Received(1).Add(Arg.Any <KudosLog>());
        }
예제 #3
0
        public void Should_Recalculate_Donators_Kudos()
        {
            var donationDto = new KudosBasketDonationDTO
            {
                DonationAmount = 20,
                OrganizationId = 2,
                UserId         = "testUserId",
                Id             = 10
            };

            _kudosBasketService.MakeDonation(donationDto);
            var user = _usersDbSet.First(u => u.Id == "testUserId");

            _kudosService.Received(1).UpdateProfileKudos(user, donationDto);
        }
예제 #4
0
        public void Should_Make_A_Donation()
        {
            var donationDto = new KudosBasketDonationDTO
            {
                DonationAmount = 20,
                OrganizationId = 2,
                UserId         = "testUserId",
                Id             = 10
            };

            _kudosBasketService.MakeDonation(donationDto);
            var basket = _kudosBasketDbSet.First(b => b.Id == 10);

            Assert.AreEqual(45, basket.KudosLogs.Sum(l => l.Points));
        }
예제 #5
0
        private KudosLog CreateKudosLogForBasket(KudosBasketDonationDTO donation, KudosType kudosType, string logComment, string userId)
        {
            var timestamp = DateTime.UtcNow;
            var kudosLog  = new KudosLog
            {
                Created         = timestamp,
                Modified        = timestamp,
                CreatedBy       = donation.UserId,
                Points          = donation.DonationAmount,
                EmployeeId      = userId,
                MultiplyBy      = KudosMultiplier,
                Status          = KudosStatus.Approved,
                Comments        = logComment,
                OrganizationId  = donation.OrganizationId,
                KudosTypeName   = kudosType.Name,
                KudosTypeValue  = kudosType.Value,
                KudosSystemType = kudosType.Type
            };

            return(kudosLog);
        }