Beispiel #1
0
        public async Task Should_Create_Two_Kudos_Logs_On_Donation()
        {
            var donationDto = new KudosBasketDonationDto
            {
                DonationAmount = 20,
                OrganizationId = 2,
                UserId         = "testUserId",
                Id             = 10
            };

            await _kudosBasketService.MakeDonationAsync(donationDto);

            _kudosLogsDbSet.Received(1).Add(Arg.Any <KudosLog>());
        }
Beispiel #2
0
        public async Task Should_Recalculate_Donators_Kudos()
        {
            var donationDto = new KudosBasketDonationDto
            {
                DonationAmount = 20,
                OrganizationId = 2,
                UserId         = "testUserId",
                Id             = 10
            };

            await _kudosBasketService.MakeDonationAsync(donationDto);

            var user = await _usersDbSet.FirstAsync(u => u.Id == "testUserId");

            await _kudosService.Received(1).UpdateProfileKudosAsync(user, donationDto);
        }
Beispiel #3
0
        public async Task Should_Make_A_Donation()
        {
            var donationDto = new KudosBasketDonationDto
            {
                DonationAmount = 20,
                OrganizationId = 2,
                UserId         = "testUserId",
                Id             = 10
            };

            await _kudosBasketService.MakeDonationAsync(donationDto);

            var basket = await _kudosBasketDbSet.FirstAsync(b => b.Id == 10);

            Assert.AreEqual(45, basket.KudosLogs.Sum(l => l.Points));
        }
Beispiel #4
0
        private static 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);
        }
Beispiel #5
0
        public async Task MakeDonationAsync(KudosBasketDonationDto donation)
        {
            await _donateLock.WaitAsync();

            try
            {
                var user = await _usersDbSet.FirstAsync(usr => usr.Id == donation.UserId);

                var basket = await _kudosBasketsDbSet
                             .Include(b => b.KudosLogs)
                             .FirstAsync(b => b.OrganizationId == donation.OrganizationId);

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

                var otherType = await _kudosTypesDbSet.FirstAsync(type => type.Type == KudosTypeEnum.Other);

                var minusType = await _kudosTypesDbSet.FirstAsync(type => type.Type == KudosTypeEnum.Minus);

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

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

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

                await _uow.SaveChangesAsync(false);

                await _kudosService.UpdateProfileKudosAsync(user, donation);
            }
            finally
            {
                _donateLock.Release();
            }
        }