Пример #1
0
        public void TryUpdateInstantLotteryWinnerFailed()
        {
            var entry = new Pororo2018InstantLottery {
                Id         = 1,
                CreateDate = new DateTime(2018, 1, 4),
                IpAddress  = "127.0.0.1",
                Channel    = Domain.Abstract.ChannelType.Mobile,
                PrizeType  = Pororo2018InstantLotteryPrizeType.JoyGifticon,
                Name       = "홍길동",
                Mobile     = "01012345678",
                UpdateDate = new DateTime(2018, 1, 4)
            };

            repo.Setup(x => x.Any(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >())).Returns(true);
            repo.Setup(x => x.Update(It.IsAny <Pororo2018InstantLottery>())).Returns(entry);

            //action
            var failedResult = Assert.Throws <Pororo2018ServiceException>(() => {
                var tryTest = service.UpdateInstantLotteryWinner(entry);
            });

            //assert
            Assert.Matches("400", failedResult.Code);
            Assert.Matches("이미 당첨된 내역이 존재합니다.당첨된 분에게는 추가 경품이 지급되지 않습니다.", failedResult.Message);
        }
Пример #2
0
        public void TryUpdateInstantLotteryWinnerSuccess()
        {
            var entry = new Pororo2018InstantLottery {
                Id         = 1,
                CreateDate = new DateTime(2018, 1, 4),
                IpAddress  = "127.0.0.1",
                Channel    = Domain.Abstract.ChannelType.Mobile,
                PrizeType  = Pororo2018InstantLotteryPrizeType.JoyGifticon,
                Name       = "홍길동",
                Mobile     = "01012345678",
                UpdateDate = new DateTime(2018, 1, 4)
            };

            repo.Setup(x => x.Any(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >())).Returns(false);
            repo.Setup(x => x.Update(It.IsAny <Pororo2018InstantLottery>())).Returns(entry);

            //action
            var result = service.UpdateInstantLotteryWinner(entry);

            //assert
            Assert.NotNull(result);
            Assert.Equal(result.PrizeType, Pororo2018InstantLotteryPrizeType.JoyGifticon);

            repo.Verify(x => x.Any(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >()), Times.Once);
            repo.Verify(x => x.Update(It.IsAny <Pororo2018InstantLottery>()), Times.Once);
            repo.Verify(x => x.Save(), Times.Once);
        }
Пример #3
0
        public void TryCreateInstantLotterySuccess()
        {
            //arrange
            var prizes = new List <Pororo2018InstantLotteryPrizeSetting>()
            {
                new Pororo2018InstantLotteryPrizeSetting {
                    Date = new DateTime(2018, 1, 4), PrizeType = Pororo2018InstantLotteryPrizeType.JoyGifticon, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 19
                },
                new Pororo2018InstantLotteryPrizeSetting {
                    Date = new DateTime(2018, 1, 4), PrizeType = Pororo2018InstantLotteryPrizeType.DIYPack, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 19
                },
                new Pororo2018InstantLotteryPrizeSetting {
                    Date = new DateTime(2018, 1, 4), PrizeType = Pororo2018InstantLotteryPrizeType.MarkerPen, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 19
                },
                new Pororo2018InstantLotteryPrizeSetting {
                    Date = new DateTime(2018, 1, 4), PrizeType = Pororo2018InstantLotteryPrizeType.Sketchbook, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12
                }
            };
            var entry = new Pororo2018InstantLottery {
                Id         = 1,
                CreateDate = new DateTime(2018, 1, 4),
                IpAddress  = "127.0.0.1",
                Channel    = Domain.Abstract.ChannelType.Mobile,
                PrizeType  = Pororo2018InstantLotteryPrizeType.Sketchbook
            };

            repo.Setup(x => x.Any(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >())).Returns(false);
            settingRepo.Setup(x => x.Filter(It.IsAny <Expression <Func <Pororo2018InstantLotteryPrizeSetting, bool> > >())).Returns(prizes.AsQueryable);
            settingRepo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <Pororo2018InstantLotteryPrizeSetting, bool> > >())).Returns(prizes[3]);
            var list = new List <Pororo2018InstantLottery>();

            repo.Setup(x => x.Filter(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >())).Returns(list.AsQueryable());
            repo.Setup(x => x.Add(It.IsAny <Pororo2018InstantLottery>())).Returns(entry);

            //action
            var result = service.CreateInstantLottery(entry, true);

            //assert
            Assert.NotNull(result);
            Assert.Equal(result.PrizeType, Pororo2018InstantLotteryPrizeType.Sketchbook);

            repo.Verify(x => x.Any(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >()), Times.Once);
            settingRepo.Verify(x => x.Filter(It.IsAny <Expression <Func <Pororo2018InstantLotteryPrizeSetting, bool> > >()), Times.Once);
            settingRepo.Verify(x => x.SingleOrDefault(It.IsAny <Expression <Func <Pororo2018InstantLotteryPrizeSetting, bool> > >()), Times.Once);
            repo.Verify(x => x.Filter(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >()), Times.Once);
            settingRepo.Verify(x => x.Update(It.IsAny <Pororo2018InstantLotteryPrizeSetting>()), Times.Once);
            repo.Verify(x => x.Add(It.IsAny <Pororo2018InstantLottery>()), Times.Once);
            repo.Verify(x => x.Save(), Times.Once);
        }
Пример #4
0
        /// <summary>
        /// 경품 당첨 후 개인정보 저장
        /// </summary>
        /// <param name="entry"></param>
        public Pororo2018InstantLottery UpdateInstantLotteryWinner(Pororo2018InstantLottery entry)
        {
            var isWin = repo.Any(x => x.PrizeType != Pororo2018InstantLotteryPrizeType.Loser && x.Mobile == entry.Mobile);

            if (isWin)
            {
                throw new Pororo2018ServiceException("400", "이미 당첨된 내역이 존재합니다.당첨된 분에게는 추가 경품이 지급되지 않습니다.", entry.Mobile);
            }

            var result = repo.Update(entry);

            repo.Save();

            return(result);
        }
Пример #5
0
        public void TryGetInstantLotteryWinnerSuccess()
        {
            var entry = new Pororo2018InstantLottery {
                Id         = 1,
                CreateDate = new DateTime(2018, 1, 4),
                IpAddress  = "127.0.0.1",
                Channel    = Domain.Abstract.ChannelType.PC,
                PrizeType  = Pororo2018InstantLotteryPrizeType.JoyGifticon
            };

            repo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >())).Returns(entry);

            //action
            var result = service.GetInstantLotteryWinner(1);

            //assert
            Assert.NotNull(result);
            Assert.Equal(result.PrizeType, Pororo2018InstantLotteryPrizeType.JoyGifticon);

            repo.Verify(x => x.SingleOrDefault(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >()), Times.Once);
        }
Пример #6
0
        /// <summary>
        /// 즉석당첨 응모
        /// </summary>
        /// <param name="entry"></param>
        /// <param name="isChecked"></param>
        /// <returns></returns>
        public Pororo2018InstantLottery CreateInstantLottery(Pororo2018InstantLottery entry, bool isChecked = false)
        {
            using (var tx = new TransactionScope()) {
                var now = time.Now;

                var isWin = repo.Any(x => x.PrizeType != Pororo2018InstantLotteryPrizeType.Loser && x.IpAddress == entry.IpAddress);

                entry.PrizeType = Pororo2018InstantLotteryPrizeType.Loser;
                if (isChecked && !isWin)
                {
                    var prizes = settingRepo.Filter(x => x.Date == now.Date && x.StartTime <= now.Hour && x.TotalCount > x.WinnerCount && x.Rate > 0.0f).ToList();
                    entry.PrizeType = prizeSelector.SelectPrize(prizes, Pororo2018InstantLotteryPrizeType.Loser, now);

                    if (entry.PrizeType != Pororo2018InstantLotteryPrizeType.Loser)
                    {
                        var prize = settingRepo.SingleOrDefault(x => x.Date == now.Date && x.PrizeType == entry.PrizeType);
                        if (prize == null)
                        {
                            entry.PrizeType = Pororo2018InstantLotteryPrizeType.Loser;
                        }
                        else
                        {
                            prize.WinnerCount = repo.Filter(x => x.CreateDate >= now.Date && x.PrizeType == entry.PrizeType).Count() + 1;
                            settingRepo.Update(prize);
                        }
                    }
                }

                entry.CreateDate = now;
                var user = repo.Add(entry);
                repo.Save();

                tx.Complete();

                return(user);
            }
        }
Пример #7
0
        public void TryCreateInstantLotteryFailedByIsWinIpAddress()
        {
            var entry = new Pororo2018InstantLottery {
                Id         = 1,
                CreateDate = new DateTime(2018, 11, 4),
                IpAddress  = "127.0.0.1",
                Channel    = Domain.Abstract.ChannelType.Mobile,
                PrizeType  = Pororo2018InstantLotteryPrizeType.Loser
            };

            repo.Setup(x => x.Any(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >())).Returns(true);
            repo.Setup(x => x.Add(It.IsAny <Pororo2018InstantLottery>())).Returns(entry);

            //action
            var result = service.CreateInstantLottery(entry, true);

            //assert
            Assert.NotNull(result);
            Assert.Equal(result.PrizeType, Pororo2018InstantLotteryPrizeType.Loser);

            repo.Verify(x => x.Any(It.IsAny <Expression <Func <Pororo2018InstantLottery, bool> > >()), Times.Once);
            repo.Verify(x => x.Add(It.IsAny <Pororo2018InstantLottery>()), Times.Once);
            repo.Verify(x => x.Save(), Times.Once);
        }