示例#1
0
 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);
        }
示例#5
0
        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);
        }