public override UserMedal CheckIfFullfiledRequirement(SpontaneousUserModel statistic, UserActivity activity) { UserMedal currentMedal = new RestaurantAdviserMedal(); currentMedal.CreatedAt = new DateTime(0); if (statistic.UserMedalsList != null && statistic.UserMedalsList.Count > 0) { //if (IfAlreadyHave(statistic)) return null; currentMedal = getLastMedal(statistic); } //Check if current activity is meets requirement string activityName = activity.GetType().Name; int activityCount = 0; if (activity is MedalViewActivity) { activityCount = statistic.GetActivityCount(activityName, ((MedalViewActivity)activity).MedalType, currentMedal.CreatedAt); } else { activityCount = statistic.GetActivityCount(activityName, currentMedal.CreatedAt); } //Check if current activity is in requirement list if (RequirementsList.FirstOrDefault(r => r.Activity.GetType().Name == activityName) != null) { if (activityCount >= RequirementsList.FirstOrDefault(r => r.Activity.GetType().Name == activityName).Count) { //Current activity is meets requirement //Check if meets other requirements necessary for the medal foreach (var requirement in RequirementsList) { activityName = requirement.Activity.GetType().Name; //avtivityCount = statistic.GetActivityCount(activityName); if (requirement.Activity is MedalViewActivity) { activityCount = statistic.GetActivityCount(activityName, "RestaurantAdviserMedal", currentMedal.CreatedAt); } else { activityCount = statistic.GetActivityCount(activityName, currentMedal.CreatedAt); } if (!(activityCount >= RequirementsList.FirstOrDefault(r => r.Activity.GetType().Name == activityName).Count)) { log.InfoFormat("[RestaurantAdviserChecker]: CheckIfFullfiledRequirement] Still not win RestaurantAdviser Medal. avtivityCount={0}", activityCount); return null; } } UserMedal medal = new RestaurantAdviserMedal(); log.InfoFormat("[RestaurantAdviserChecker]: CheckIfFullfiledRequirement] Win RestaurantAdviser Medal. avtivityCount={0}", activityCount); return medal; } } else { log.InfoFormat("[RestaurantAdviserChecker]: CheckIfFullfiledRequirement] Still not win RestaurantAdviser Medal. avtivityCount={0}", activityCount); } return null; }
public UserMedal getLastMedal(SpontaneousUserModel statistic) { UserMedal returnValue = new RestaurantAdviserMedal(); returnValue.CreatedAt = new DateTime(0); if (statistic != null && statistic.UserMedalsList != null && IfAlreadyHave(statistic)) { var adviserMedalList = statistic.UserMedalsList.Where(c => c is RestaurantAdviserMedal); if (adviserMedalList != null) { returnValue = adviserMedalList.OrderBy(o => o.CreatedAt).ToList().LastOrDefault(); } } log.DebugFormat("[RestaurantAdviserChecker]: getLastMedal, CreatedAt={0}", returnValue.CreatedAt); return returnValue; }
public void ToUserMedalModelTest_ShouldConvertUserMedalObjectToViewModel_ifCouponExistShouldConvertCouponTypeToCouponTypeModel() { //Arrange DateTime time = DateTime.UtcNow; CouponType coupon = new CouponType() { Id = new ObjectId("51aae3bf3720e811c09fb107"), Description = "test coupon nomber 1", RestaurantsIDs = new List<string>() { "51b02f863720e81d6cf62a3b", "51cbee273720e80ea00922ae" }, ValidFrom = new DateTime(0), ValidUntil = time }; UserMedal medal1 = new WelcomeUserMedal(); medal1.Coupon = coupon; UserMedal medal2 = new RestaurantAdviserMedal(); //Act UserMedalModel medalModel1 = medal1.ToUserMedalModel(); UserMedalModel medalModel2 = medal2.ToUserMedalModel(); //Assert Assert.AreEqual(medalModel1.MedalName, "ברוכים הבאים"); Assert.AreEqual(medalModel2.MedalName, "מבקר מסעדות"); Assert.AreEqual(medalModel1.CreatedAt, medal1.CreatedAt); Assert.AreEqual(medalModel1.Coupon.Id, medal1.Coupon.Id.ToString()); Assert.IsNull(medalModel2.Coupon); }
public override MedalProgress GetProgress(SpontaneousUserModel statistic) { //if (!IfAlreadyHave(statistic)) //{ UserMedal currentMedal = new RestaurantAdviserMedal(); currentMedal.CreatedAt = new DateTime(0); if (statistic.UserMedalsList != null && statistic.UserMedalsList.Count > 0) { currentMedal = getLastMedal(statistic); } MedalProgress returnValue = new MedalProgress() { MedalType = MedalType, }; //Calculate total points required for the medal foreach (var requirement in RequirementsList) { returnValue.totalPointsRequired += requirement.Activity.Points * requirement.Count; } returnValue.pointsRequired = returnValue.totalPointsRequired; if (statistic != null && statistic.UserActivityList != null) { //Calculate points still required for the medal bool inviteFriendActivityFlag = false; foreach (UserActivity userActivity in statistic.UserActivityList) { if (userActivity.Date > currentMedal.CreatedAt) { if (userActivity is InviteFriendActivity) { if (!inviteFriendActivityFlag) { returnValue.pointsRequired = returnValue.pointsRequired -= userActivity.Points; inviteFriendActivityFlag = true; } } }//if (userActivity.Date > currentMedal.CreatedAt) } if (returnValue.pointsRequired < 0) returnValue.pointsRequired = 0; } return returnValue; //} //return null; }
public void GetMedalsTest_Should_ReturnListOfUserMedal_ifMedalWithNullCouponMustCreatNewCoupon() { //Arrange SpontaneousUserModel userModel = new SpontaneousUserModel() { UserActivityList = new List<UserActivity>(), UserMedalsList = new List<UserMedal>() }; DateTime time = DateTime.UtcNow; CouponType coupon = new CouponType() { Id = new ObjectId("51aae3bf3720e811c09fb107"), Description = "test coupon nomber 1", RestaurantsIDs = new List<string>() { "51b02f863720e81d6cf62a3b", "51cbee273720e80ea00922ae" }, ValidFrom = new DateTime(0), ValidUntil = time }; UserMedal medal1 = new WelcomeUserMedal(); UserMedal medal2 = new RestaurantAdviserMedal(); UserMedal medal3 = new RestaurantAdviserMedal(); medal3.Coupon = coupon; UserMedal medal4 = new FlowCompleteMedal(); UserMedal medal5 = new AddRestaurantMedal(); userModel.UserMedalsList.Add(medal1); userModel.UserMedalsList.Add(medal2); userModel.UserMedalsList.Add(medal3); userModel.UserMedalsList.Add(medal4); userModel.UserMedalsList.Add(medal5); //Act List<UserMedal> list = serviceLayer.GetMedals(); //Assert Assert.IsFalse(list.Exists(m => m.Coupon == null)); }