public void MapFrom_Should_ReturnCorrectInstanceOfCommentCollection()
        {
            //Arrange
            var sut = new CommentViewModelMapper();

            var comment = new List <Comment>
            {
                new Comment
                {
                    Id          = Guid.NewGuid(),
                    ReviewId    = Guid.NewGuid(),
                    UserId      = Guid.NewGuid(),
                    Author      = "testAuthor",
                    CommentText = "TestText",
                    CreatedOn   = DateTime.MinValue,
                },
                new Comment
                {
                    Id          = Guid.NewGuid(),
                    ReviewId    = Guid.NewGuid(),
                    UserId      = Guid.NewGuid(),
                    Author      = "testAuthor02",
                    CommentText = "TestText02",
                    CreatedOn   = DateTime.MinValue,
                },
            };

            //Act
            var result = sut.MapFrom(comment);

            //Assert
            Assert.IsInstanceOfType(result, typeof(List <CommentViewModel>));
        }
        public void EnsureMapperMapsCorrectly()
        {
            //Arrange
            var sut = new CommentViewModelMapper();

            var comment = new Comment
            {
                Id          = Guid.NewGuid(),
                ReviewId    = Guid.NewGuid(),
                UserId      = Guid.NewGuid(),
                Author      = "testAuthor",
                CommentText = "TestText",
                CreatedOn   = DateTime.MinValue,
            };

            //Act
            var result = sut.MapFrom(comment);

            //Assert
            Assert.AreEqual(result.Id, comment.Id);
            Assert.AreEqual(result.ReviewId, comment.ReviewId);
            Assert.AreEqual(result.UserId, comment.UserId);
            Assert.AreEqual(result.Author, comment.Author);
            Assert.AreEqual(result.CommentText, comment.CommentText);
            Assert.AreEqual(result.CreatedOn, comment.CreatedOn);
        }
        public void MapFrom_ShouldReturnCorrectNumberOfComments()
        {
            //Arrange
            var sut = new CommentViewModelMapper();

            var comment = new List <Comment>
            {
                new Comment
                {
                    Id          = Guid.NewGuid(),
                    ReviewId    = Guid.NewGuid(),
                    UserId      = Guid.NewGuid(),
                    Author      = "testAuthor",
                    CommentText = "TestText",
                    CreatedOn   = DateTime.MinValue,
                },
                new Comment
                {
                    Id          = Guid.NewGuid(),
                    ReviewId    = Guid.NewGuid(),
                    UserId      = Guid.NewGuid(),
                    Author      = "testAuthor02",
                    CommentText = "TestText02",
                    CreatedOn   = DateTime.MinValue,
                },
            };

            //Act
            var result = sut.MapFrom(comment);

            //Assert
            Assert.AreEqual(2, result.Count());
        }
        public async Task <IViewComponentResult> InvokeAsync(Guid postId, int page = 0)
        {
            var comments = await _commentService.GetPagedResult(page, 10, x => x.Post.Id == postId && x.IsReply == false, x => x.DateCreated);

            var data = comments.Select(x => CommentViewModelMapper.Map(x)).ToList();

            List <Core.Entities.Comment> replies = await _commentService.GetReplies(postId);

            foreach (var item in data)
            {
                FillReplies(item, replies);
            }

            var commentsResult = new PagedList <CommentViewModel>(data, comments.PageIndex, comments.PageSize, comments.ResultsCaunt, comments.TotalCaunt);

            return(await Task.FromResult((IViewComponentResult)View(commentsResult)));
        }
        public void ReturnValidInstanceOfClass()
        {
            //Arrange
            var sut = new CommentViewModelMapper();

            var comment = new Comment
            {
                Id          = Guid.NewGuid(),
                ReviewId    = Guid.NewGuid(),
                UserId      = Guid.NewGuid(),
                Author      = "testAuthor",
                CommentText = "TestText",
                CreatedOn   = DateTime.MinValue,
            };

            //Act
            var result = sut.MapFrom(comment);

            //Assert
            Assert.IsInstanceOfType(result, typeof(CommentViewModel));
        }
        /// <summary>
        /// Recursively itterates and fill all replies per comment
        /// </summary>
        /// <param name="comment">current comment</param>
        /// <param name="allreplies">all comments marked as "IsReply" per post</param>
        private void FillReplies(CommentViewModel comment, List <Core.Entities.Comment> allreplies)
        {
            if (!allreplies.Any(r => r.InReplyTo.Equals(comment.CommentId)))//no replies for this comment
            {
                return;
            }

            List <CommentViewModel> replies = allreplies.Where(r => r.InReplyTo.Equals(comment.CommentId)).Select(x => CommentViewModelMapper.Map(x)).ToList();

            foreach (var item in replies)
            {
                FillReplies(item, allreplies);
            }

            comment.Replies = replies;
        }