public IActionResult Post(string id, [FromBody] RatingDriver driverRating) { if (driverRating.Id == 0) { _repo.AddDriverRating(id, driverRating); } else { _repo.UpdateDriverRating(driverRating); } return(Ok(driverRating)); }
/// <summary> /// Method to add a rating to a applicationuser /// </summary> /// <param name="id"></param> /// <param name="driverRating"></param> /// <returns></returns> public decimal AddDriverRating(string id, RatingDriver driverRating) { var user = _repo.Query <ApplicationUser>().Where(u => u.Id == id).Include(c => c.DriverRatings).FirstOrDefault(); user.DriverRatings.Add(driverRating); _repo.SaveChanges(); //Helper method that calculates the driverRating sent this.CalculateDriverRating(user, driverRating); _repo.SaveChanges(); return(user.AverageRating); }
/// <summary> /// Method to update a driverRating /// </summary> /// <param name="driverRating"></param> public void UpdateDriverRating(RatingDriver driverRating) { var originalDriverRating = _repo.Query <RatingDriver>().Where(c => c.Id == driverRating.Id).FirstOrDefault(); originalDriverRating.PaymentExperience = driverRating.PaymentExperience; originalDriverRating.ProfessionalismOfDriver = driverRating.ProfessionalismOfDriver; originalDriverRating.PromptReplies = driverRating.PromptReplies; originalDriverRating.SchedulingExperience = driverRating.SchedulingExperience; originalDriverRating.Trustworthiness = driverRating.Trustworthiness; originalDriverRating.OverallRating = driverRating.OverallRating; _repo.Update <RatingDriver>(originalDriverRating); }
/// <summary> /// Helper method used for calculating average RatingDriver /// Also separated logic for easier unit testing /// </summary> /// <param name="user"></param> /// <param name="driverRating"></param> /// <returns></returns> public decimal CalculateDriverRating(ApplicationUser user, RatingDriver driverRating) { var total = ((driverRating.PaymentExperience) + (driverRating.ProfessionalismOfDriver) + (driverRating.PromptReplies) + (driverRating.SchedulingExperience) + (driverRating.Trustworthiness) + (driverRating.ConditionOfReturnedCar) + (driverRating.DeliveryExperience)) / 7; driverRating.OverallRating = total; if (user.DriverRatings.Count == 0) { user.AverageRating = ((user.AverageRating * user.DriverRatings.Count) + total) / user.DriverRatings.Count; } else { user.AverageRating = ((user.AverageRating * (user.DriverRatings.Count - 1)) + total) / user.DriverRatings.Count; } return(user.AverageRating); }
public void TestAddDriverRating() { //Arrange var mock = new Mock <IGenericRepository>(); mock.Setup(x => x.Query <ApplicationUser>()).Returns(users.AsQueryable()); var driverRatingService = new DriverRatingService(mock.Object); var ratingDriverTest = new RatingDriver() { ConditionOfReturnedCar = 4, DeliveryExperience = 3, PaymentExperience = 4, ProfessionalismOfDriver = 5, PromptReplies = 4, SchedulingExperience = 3, Trustworthiness = 5 }; //Act var result = driverRatingService.CalculateDriverRating(this.user, ratingDriverTest); //Assert Assert.Equal(result, 4m); }