public async Task <ReviewsBindingModel> GetReviewsBindingModelByUserId(string userId, int pageNumber, int pageSize) { if (userId.IsNullOrEmpty()) { throw new ArgumentException(GlobalConstants.NullOrEmptyUserIdErrorMessage); } var owner = await usersService.GetUserByIdAsync(userId); var reviewViewModel = GetReviewViewModelsByUserId(userId); var paginatedReviewViewModels = await PaginatedList <ReviewViewModel> .CreateAsync(reviewViewModel, pageNumber, pageSize); var averageRating = context.Reviews.Count(x => x.OwnerId == userId) > 0 ? context.Reviews.Where(x => x.OwnerId == userId).Average(x => x.Rating) : 0; var reviewsBindingModel = new ReviewsBindingModel { OwnerId = userId, OwnerUsername = owner.UserName, SenderId = usersService.GetCurrentUserId(), Votes = GetVotesByStars(userId), AverageVote = averageRating, ViewModels = paginatedReviewViewModels }; return(reviewsBindingModel); }
public async Task GetReviewsBindingModelByUserId_WithValid_ShouldReturnCorrectResult() { //Arrange var expectedViewModelsCount = 3; var listOfReviewViewModels = new List <ReviewViewModel> { new ReviewViewModel { Content = "Comment for the first review.", Rating = 2, Sender = "Creator" }, new ReviewViewModel { Content = "Comment for the second review.", Rating = 3, Sender = "Creator" }, new ReviewViewModel { Content = "Comment for the third review.", Rating = 5, Sender = "Creator" } }; var expected = new ReviewsBindingModel { OwnerId = "OwnerId", OwnerUsername = "******", SenderId = "CreatorId", Votes = new List <int> { 0, 0, 1, 1, 0, 1 }, AverageVote = new List <int> { 2, 3, 5 }.Average(), ViewModels = new PaginatedList <ReviewViewModel>(listOfReviewViewModels, 3, 1, 10) }; var moqUsersService = new Mock <IUsersService>(); moqUsersService.Setup(x => x.GetUserByIdAsync("OwnerId")) .ReturnsAsync(new SellMeUser { Id = "OwnerId", UserName = "******" }); moqUsersService.Setup(x => x.GetCurrentUserId()) .Returns("CreatorId"); var context = InitializeContext.CreateContextForInMemory(); reviewsService = new ReviewsService(context, moqUsersService.Object); var testingReviews = new List <Review> { new Review { OwnerId = "OwnerId", CreatorId = "CreatorId", Comment = "Comment for the first review.", Rating = 2 }, new Review { OwnerId = "OwnerId", CreatorId = "CreatorId", Comment = "Comment for the second review.", Rating = 3 }, new Review { OwnerId = "OwnerId", CreatorId = "CreatorId", Comment = "Comment for the third review.", Rating = 5 } }; var testingUsers = new List <SellMeUser> { new SellMeUser { Id = "CreatorId", UserName = "******" }, new SellMeUser { Id = "OwnerId", UserName = "******" } }; await context.Reviews.AddRangeAsync(testingReviews); await context.SellMeUsers.AddRangeAsync(testingUsers); await context.SaveChangesAsync(); //Act var actual = await reviewsService.GetReviewsBindingModelByUserId("OwnerId", 1, 10); Assert.Equal(expected.OwnerId, actual.OwnerId); Assert.Equal(expected.OwnerUsername, actual.OwnerUsername); Assert.Equal(expected.SenderId, actual.SenderId); Assert.Equal(expected.AverageVote, actual.AverageVote); Assert.Equal(expectedViewModelsCount, actual.ViewModels.Count); Assert.Equal(expected.ViewModels[0].Content, actual.ViewModels[0].Content); Assert.Equal(expected.ViewModels[0].Rating, actual.ViewModels[0].Rating); Assert.Equal(expected.ViewModels[0].Sender, actual.ViewModels[0].Sender); }