예제 #1
0
        public async Task Handler_GivenInvalidAuthorId_ReturnsEmptyCommentsDTOCollection()
        {
            // Arrange
            var query = new GetCommentsByAuthorIdQuery {
                AuthorId = 99
            };

            // Act
            var handler = new GetCommentsByAuthorIdQuery.GetCommentsByAuthorIdQueryHandler(Context, Mapper);
            var result  = await handler.Handle(query, CancellationToken.None);

            // Assert
            result.ShouldBeEmpty();
        }
예제 #2
0
        public async Task Handler_GivenValidAuthorId_ReturnsNotEmptyCommentsDTOCollection()
        {
            // Arrange
            var query = new GetCommentsByAuthorIdQuery {
                AuthorId = 1
            };

            // Act
            var handler = new GetCommentsByAuthorIdQuery.GetCommentsByAuthorIdQueryHandler(Context, Mapper);
            var result  = await handler.Handle(query, CancellationToken.None);

            // Assert
            result.ShouldBeOfType <List <CommentDTO> >();
            result.ShouldNotBeNull();
        }
예제 #3
0
        /// <summary>
        /// Show user profile page.
        /// </summary>
        /// <param name="id">Author identifier.</param>
        /// <returns>User profile page.</returns>
        public async Task <ActionResult> Index(int id)
        {
            if (id <= 0)
            {
                return(RedirectToAction("Index", "Home"));
            }

            // Get author current author.
            var authorQuery = new GetAuthorQuery {
                Id = id
            };
            var authorDTO = await _mediator.Send(authorQuery);

            authorDTO.Email = await _identityService.GetEmailByIdAsync(authorDTO.UserId);

            // Calculate author statistics.
            var postsQuery = new GetPostsByAuthorIdQuery {
                AuthorId = authorDTO.Id
            };
            var postsDTO = await _mediator.Send(postsQuery);

            var postsNumber = postsDTO.Count;

            var commentsQuery = new GetCommentsByAuthorIdQuery {
                AuthorId = authorDTO.Id
            };
            var commentsDTO = await _mediator.Send(commentsQuery);

            var commentsNumber = commentsDTO.Count;

            // Check current user if he / she is an author of the current post.
            var userName = HttpContext.User.Identity.Name;
            int currentReaderId;

            if (userName == null)
            {
                currentReaderId = default;
            }
            else
            {
                var userId = await _identityService.GetUserIdByNameAsync(userName);

                var reader = await _mediator.Send(new GetAuthorByUserIdQuery { UserId = userId });

                if (reader == null)
                {
                    currentReaderId = default;
                }
                else
                {
                    currentReaderId = reader.Id;
                }
            }

            var model = _mapper.Map <AuthorDTO, ProfileViewModel>(authorDTO);

            model.Age = authorDTO.BirthDate.Age(AgeUnits.Year);
            model.TotalPostsNumber    = postsNumber;
            model.TotalCommentsNumber = commentsNumber;
            model.Posts           = postsDTO;
            model.CurrentReaderId = currentReaderId;
            model.BirthDate       = authorDTO.BirthDate.ToString("MMMM d, yyyy");

            return(View(model));
        }