public void UpdateTwoYearAnniversaryWinCouponSuccess() { // 아이디 준비 var entry = new TwoYearAnniversaryEntry { Id = 1, CreateDate = new DateTime(2018, 3, 29), IpAddress = "127.0.0.1", SamsoniteId = "pentacleId123", PrizeType = TwoYearAnniversarInstantPrizeType.StarBucks, Channel = Domain.Entities.Abstract.ChannelType.PC }; entryRepo.Setup(x => x.Add(It.IsAny <TwoYearAnniversaryEntry>())).Returns(entry); entryRepo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(entry); var coupon = new TwoYearAnniversaryWinCoupon { CouponType = 0, CouponCode = "1", //TwoYearAnniversaryEntryId = 1, //WinnerDate = new DateTime(2018, 3, 29), }; couponRepo.Setup(x => x.Add(It.IsAny <TwoYearAnniversaryWinCoupon>())).Returns(coupon); couponRepo.Setup(x => x.FirstOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryWinCoupon, bool> > >())).Returns(coupon); var resultCoupon = new TwoYearAnniversaryWinCoupon { CouponType = 0, CouponCode = "1", TwoYearAnniversaryEntryId = 1, WinnerDate = new DateTime(2018, 3, 29), }; couponRepo.Setup(x => x.Update(It.IsAny <TwoYearAnniversaryWinCoupon>())).Returns(resultCoupon); long entryId = 1; var result = service.UpdateTwoYearAnniversaryWinCoupon(entryId); Assert.NotNull(resultCoupon); //null check //var user = new TwoYearAnniversaryEntry { }; //user = null; //entryRepo.Setup(x => x.SingleOrDefault(It.IsAny<Expression<Func<TwoYearAnniversaryEntry, bool>>>())).Returns(user); //long entryId = 1; //var failedResult = Assert.Throws<TwoYearAnniversaryServiceException>(() => { // var result = service.UpdateTwoYearAnniversaryWinCoupon(entryId); //}); //Assert.Matches("400", failedResult.Code); //Assert.Matches("당첨 데이터가 존재하지 않습니다.", failedResult.Message); }
public void CreateTwoYearAnniversaryEntrySuccess() { var prizes = new List <TwoYearAnniversaryInstantPrizeSetting>() { new TwoYearAnniversaryInstantPrizeSetting { Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.StarBucks, Rate = 0.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12 }, new TwoYearAnniversaryInstantPrizeSetting { Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.AtKidsBagPack, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12 }, new TwoYearAnniversaryInstantPrizeSetting { Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.OriginalBag, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12 }, new TwoYearAnniversaryInstantPrizeSetting { Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.Coupon_20, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12 }, new TwoYearAnniversaryInstantPrizeSetting { Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.LineFriendsCarrier, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12 } }; var user = new TwoYearAnniversaryEntry { }; user = null; var entry = new TwoYearAnniversaryEntry { Id = 1, CreateDate = new DateTime(2018, 3, 29), IpAddress = "127.0.0.1", SamsoniteId = "pentacleId123", PrizeType = TwoYearAnniversarInstantPrizeType.StarBucks, Channel = Domain.Entities.Abstract.ChannelType.PC }; entryRepo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(user); entryRepo.Setup(x => x.Any(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(false); settingRepo.Setup(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >())).Returns(prizes.AsQueryable()); settingRepo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >())).Returns(prizes[1]); var list = new List <TwoYearAnniversaryEntry>(); entryRepo.Setup(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(list.AsQueryable()); entryRepo.Setup(x => x.Add(It.IsAny <TwoYearAnniversaryEntry>())).Returns(entry); //action var result = service.CreateTwoYearAnniversaryEntry(entry); //assert Assert.NotNull(result); Assert.Equal(result.PrizeType, TwoYearAnniversarInstantPrizeType.AtKidsBagPack); entryRepo.Verify(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >()), Times.Once); entryRepo.Verify(x => x.Any(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >()), Times.Once); settingRepo.Verify(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >()), Times.Once); settingRepo.Verify(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >()), Times.Once); entryRepo.Verify(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >()), Times.Once); settingRepo.Verify(x => x.Update(It.IsAny <TwoYearAnniversaryInstantPrizeSetting>()), Times.Once); entryRepo.Verify(x => x.Add(It.IsAny <TwoYearAnniversaryEntry>()), Times.Once); entryRepo.Verify(x => x.Save(), Times.Once); }
/// <summary> /// 즉석당첨 정보저장 /// </summary> /// <param name="entity"></param> /// <returns></returns> public TwoYearAnniversaryEntry CreateTwoYearAnniversaryEntry(TwoYearAnniversaryEntry entity) { var today = time.Now.Date; var tommorrow = today.AddDays(1); var isEntryCount = twoYearRepository.SingleOrDefault(x => x.CreateDate >= today && x.CreateDate <= tommorrow && x.SamsoniteId == entity.SamsoniteId); if (isEntryCount != null) { // 1일 응모횟수 1회 제한 throw new TwoYearAnniversaryServiceException("400", "하루에 한 번 응모가 가능합니다. 내일 다시 참여해주세요!", null); } using (var tx = new TransactionScope()) { var now = time.Now; // 기당첨 check ( 연락처 ) var isWin = twoYearRepository.Any(x => x.PrizeType != TwoYearAnniversarInstantPrizeType.Loser && x.SamsoniteId == entity.SamsoniteId); // 당첨되었을대 세팅 entity.PrizeType = TwoYearAnniversarInstantPrizeType.Loser; // 당첨되지 않았다면. if (!isWin) { //조건체크를 한번하고. var prizes = prizeRepository.Filter(x => x.Date == now.Date && x.StartTime <= now.Hour && x.TotalCount > x.WinnerCount && x.Rate > 0.0f); entity.PrizeType = prizeSelector.SelectPrize(prizes.ToList(), TwoYearAnniversarInstantPrizeType.Loser, now); if (entity.PrizeType != TwoYearAnniversarInstantPrizeType.Loser) { var prize = prizeRepository.SingleOrDefault(x => x.Date == now.Date && x.PrizeType == entity.PrizeType); if (prize == null) { //상품세팅이 아무것도 안되어 있다면 entity.PrizeType = TwoYearAnniversarInstantPrizeType.Loser; } else { //전체 entry 에서 데이터를 카운팅 후 1건 당첨된것을 상품세팅 테이블에 카운팅 prize.WinnerCount = twoYearRepository.Filter(x => x.CreateDate >= now.Date && x.PrizeType == entity.PrizeType).Count() + 1; prizeRepository.Update(prize); } } } var user = twoYearRepository.Add(entity); twoYearRepository.Save(); tx.Complete(); return(user); } }
public ActionResult CreateTwoYearAnniversaryEntry(TwoYearCustNoModel custNoModel) { try { if (common.Now >= new DateTime(2018, 4, 19)) { throw new TwoYearAnniversaryServiceException("400", "이벤트가 종료되었습니다.", null); } if (string.IsNullOrEmpty(custNoModel.TwoYearCustNo)) { throw new TwoYearAnniversaryServiceException("400", "쌤소나이트에 로그인 후 시도해주세요.", null); } var encrytionId = custNoModel.TwoYearCustNo; var samsoniteId = decrypt(encrytionId); //string samsoniteId= Session["TwoAnniversarySamsoniteId"] as string; var entry = new TwoYearAnniversaryEntry() { SamsoniteId = encrytionId, SamsoniteEncryptionId = samsoniteId, CreateDate = common.Now, Channel = common.IsMobileDevice ? Domain.Entities.Abstract.ChannelType.Mobile : Domain.Entities.Abstract.ChannelType.PC, IpAddress = common.IpAddress }; var user = service.CreateTwoYearAnniversaryEntry(entry); var coupon = service.UpdateTwoYearAnniversaryWinCoupon(user.Id); if (coupon != null) { var couponUrl = ConfigurationManager.AppSettings["samsonite.coupon.url"] as string; string url = string.Format(couponUrl + "?custNo={0}&coupon={1}", user.SamsoniteId, coupon.CouponCode); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = "GET"; //httpWebRequest.ContentType = "application/x-www-form-urlencoded"; // 실서버 반영시 주석 해제 using (HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { } } var model = new TwoYearAnniversaryViewModel() { PrizeType = user.PrizeType, RouletteType = 4, PrizeName = "wlaossdefr", }; /* * - 서버 룰렛 순서 = ["1만원쿠폰","스타벅스 기프티콘", "키즈백팩", "쌤소나이트 정품가방", "20만원쿠폰", "라인프렌즈 콜라보 캐리어"] * - 뷰단 룰렛 순서 = ["라인프렌즈 콜라보 캐리어", "20만원쿠폰", "키즈백팩", "스타벅스 기프티콘", "1만원쿠폰", "쌤소나이트 정품가방"] */ switch (user.PrizeType) { case TwoYearAnniversarInstantPrizeType.Loser: default: model.PrizeName = "wlaossdefr"; model.RouletteType = 4; break; case TwoYearAnniversarInstantPrizeType.StarBucks: model.PrizeName = "wzzxjcvvl"; model.RouletteType = 3; break; case TwoYearAnniversarInstantPrizeType.AtKidsBagPack: model.PrizeName = "wgrfkdqskad"; model.RouletteType = 2; break; case TwoYearAnniversarInstantPrizeType.OriginalBag: model.PrizeName = "wtrrkeqwkqd"; model.RouletteType = 5; break; case TwoYearAnniversarInstantPrizeType.Coupon_20: model.PrizeName = "wlzknjvhhgs"; model.RouletteType = 1; break; case TwoYearAnniversarInstantPrizeType.LineFriendsCarrier: model.PrizeName = "wmznobfvlcdxj"; model.RouletteType = 0; break; } return(Json(new { result = true, data = model })); } catch (TwoYearAnniversaryServiceException e) { return(Json(new { result = false, message = e.Message })); } catch (Exception e) { return(Json(new { result = false, message = "서비스 점검중입니다. 잠시 후 시도해보시거나, 담당자에게 문의하시기 바랍니다." })); } }