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(); }
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)); }
/// <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)); }