public async Task <IActionResult> Edit(int id) { // Get post. var postQuery = new GetPostQuery { Id = id }; var postDTO = await _mediator.Send(postQuery); if (postDTO == null) { return(NotFound(id)); } // Get topic. var topicId = postDTO.TopicId; var topicQuery = new GetTopicQuery { Id = topicId }; var topicDTO = await _mediator.Send(topicQuery); var model = _mapper.Map <PostDTO, EditPostViewModel>(postDTO); model.Topic = topicDTO.Text; // Get topics list. var topicsDTO = await _mediator.Send(new GetTopicsQuery()); var topics = _mapper.Map <IEnumerable <TopicDTO>, ICollection <TopicViewModel> >(topicsDTO); model.Topics = topics; return(View(model)); }
public async Task <IActionResult> AllPosts() { // Get all posts. var postsQuery = new GetPostsQuery(); 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.Author = author.FirstName + " " + author.LastName; model.Topic = topic.Text; } return(View(models)); }
public async Task ShouldThrowOnCommandWithDefaults() { await SeedTestData(); var command = new GetTopicQuery(); FluentActions.Invoking(() => SendAsync(command)) .Should().Throw <NotFoundException>(); }
public async Task ShouldReturnAnyData() { await SeedTestData(); var command = new GetTopicQuery() { Id = 1 }; var result = await SendAsync(command); result.Should().NotBeNull(); }
public async Task ShouldThrowOnNotExistinUrl() { await SeedTestData(); var command = new GetTopicQuery() { Id = 10 }; FluentActions.Invoking(() => SendAsync(command)) .Should().Throw <NotFoundException>(); }
public async Task ShouldNotThrow() { await SeedTestData(); var command = new GetTopicQuery() { Id = 1 }; FluentActions.Invoking(() => SendAsync(command)) .Should().NotThrow(); }
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)); }
public async Task Handle_GivenValidId_ReturnsTopicDTO() { // Arrange var topic = new TopicDTO { Id = 1, Text = "Topic_One", }; var query = new GetTopicQuery { Id = 1 }; // Act var handler = new GetTopicQuery.GetTopicQueryHandler(Context, Mapper); var result = await handler.Handle(query, CancellationToken.None); // Assert result.ShouldBeOfType <TopicDTO>(); result.ShouldNotBeNull(); result.Id.ShouldBe(topic.Id); result.Text.ShouldBe(topic.Text); }
public async Task <IActionResult> Read(int id) { if (id == default) { return(NotFound()); } // Get post. var postQuery = new GetPostQuery { Id = id }; var post = await _mediator.Send(postQuery); // Add author information. var authorQuery = new GetAuthorQuery { Id = post.AuthorId }; var author = await _mediator.Send(authorQuery); post.Author = author.FirstName + " " + author.LastName; // Add topic information. var topicQuery = new GetTopicQuery { Id = post.TopicId }; var topic = await _mediator.Send(topicQuery); post.Topic = topic.Text; // Get comments for current post. var commentsQuery = new GetCommentsByPostIdQuery { PostId = post.Id }; var comments = await _mediator.Send(commentsQuery); // Create post view model. var model = _mapper.Map <PostDTO, PostViewModel>(post); model.AuthorAvatar = author.Avatar; // Check current user if he/she is an author of the current post. var userName = HttpContext.User.Identity.Name; if (userName == null) { model.CurrentReaderId = default; } else { var userId = await _identityService.GetUserIdByNameAsync(userName); var reader = await _mediator.Send(new GetAuthorByUserIdQuery { UserId = userId }); if (reader == null) { model.CurrentReaderId = default; } else { model.CurrentReaderId = reader.Id; } } // Check post comments model.Comments = _mapper.Map <ICollection <CommentDTO>, ICollection <CommentViewModel> >(comments); foreach (var comment in model.Comments) { var commentAuthorQuery = new GetAuthorQuery { Id = comment.AuthorId }; var commentAuthor = await _mediator.Send(commentAuthorQuery); comment.Author = commentAuthor.FirstName + " " + commentAuthor.LastName; (var age, var units) = comment.Date.Age(); comment.Age = age; comment.AgeUnits = units; comment.AuthorAvatar = commentAuthor.Avatar; } return(View(model)); }