コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }