public void GetAverageRatingOfPosts_NoRatingsYet_Returns_Default() { // Arrange var postId = 2; var ratingsFromRepo = GetFakeRatingsList2().Where(x => x.PostId == postId); // Act _repoMock.Setup(x => x.GetRatings(postId)).ReturnsAsync(ratingsFromRepo); var result = _calculateAverageRatings.GetAverageRating(postId).Result; // Assert var okResult = Assert.IsType <double>(result); Assert.Equal(ratingsFromRepo.Count().ToString(), okResult.ToString()); }
public async Task <IActionResult> GetPost(int id) { var calculateAverageRatings = new CalculateAverageRatings(_recipeRepo); var post = await _recipeRepo.GetPost(id); var average = calculateAverageRatings.GetAverageRating(id).Result; // Assign users avatar to the post var authorAvatar = await _recipeRepo.GetMainPhotoForUser(post.UserId); if (authorAvatar != null) { post.UserPhotoUrl = authorAvatar.Url; } // Assign commenters photos foreach (var comment in post.Comments) { var commenterId = comment.CommenterId; var commentersMainPhoto = await _recipeRepo.GetMainPhotoForUser(commenterId); if (commentersMainPhoto != null) { comment.UserPhotoUrl = commentersMainPhoto.Url; } } if (post.Ratings.Count() == 0) { post.AverageRating = 0; } else { post.AverageRating = average; } var postFromRepo = _mapper.Map <PostsForDetailedDto>(post); if (await _recipeRepo.SaveAll()) { return(Ok(postFromRepo)); } return(Ok(postFromRepo)); }
public async Task <IActionResult> GetPosts([FromQuery] PageParams pageParams, PostForSearchDto postForSearchDto) { var calculateAverageRatings = new CalculateAverageRatings(_recipeRepo); var posts = await _recipeRepo.GetPosts(pageParams, postForSearchDto); foreach (var post in posts) { // Assign users avatar to the post var authorAvatar = await _recipeRepo.GetMainPhotoForUser(post.UserId); if (authorAvatar != null) { post.UserPhotoUrl = authorAvatar.Url; } // Calculate average rating of post var average = calculateAverageRatings.GetAverageRating(post.PostId).Result; if (post.Ratings.Count() == 0) { post.AverageRating = 0; } else { post.AverageRating = average; } } var postsFromRepo = _mapper.Map <IEnumerable <PostsForListDto> >(posts); Response.AddPagination(posts.CurrentPage, posts.PageSize, posts.TotalCount, posts.TotalPages); // If update to average rating, save to the database and return the newly updated posts if (await _recipeRepo.SaveAll()) { return(Ok(postsFromRepo)); } return(Ok(postsFromRepo)); }