public async Task Handler_GivenInvalidAuthorId_ReturnsEmptyCommentsDTOCollection()
        {
            // Arrange
            var query = new GetPostsByAuthorIdQuery {
                AuthorId = 99
            };

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

            // Assert
            result.ShouldBeEmpty();
        }
        public async Task Handler_GivenValidAuthorId_ReturnsNotEmptyPostsDTOCollection()
        {
            // Arrange
            var query = new GetPostsByAuthorIdQuery {
                AuthorId = 1
            };

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

            // Assert
            result.ShouldBeOfType <List <PostDTO> >();
            result.ShouldNotBeNull();
        }
Пример #3
0
        public async Task <IActionResult> Index(int id = default)
        {
            IRequest <ICollection <PostDTO> > postsQuery;

            if (id == default)
            {
                postsQuery = new GetPostsQuery();
            }
            else
            {
                postsQuery = new GetPostsByAuthorIdQuery {
                    AuthorId = id
                }
            };

            // Get all posts.
            var postsDTO = await _mediator.Send(postsQuery);

            var posts = postsDTO.OrderByDescending(post => post.Date);

            var models = _mapper.Map <IEnumerable <PostDTO>, IEnumerable <PostViewModel> >(posts);

            foreach (var model in models)
            {
                var authorQuery = new GetAuthorQuery {
                    Id = model.AuthorId
                };
                var author = await _mediator.Send(authorQuery);

                var topicQuery = new GetTopicQuery {
                    Id = model.TopicId
                };
                var topic = await _mediator.Send(topicQuery);

                model.AuthorId = author.Id;
                model.Author   = author.FirstName + " " + author.LastName;
                model.Topic    = topic.Text;
            }

            return(View(models));
        }
Пример #4
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));
        }