Beispiel #1
0
        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));
        }
Beispiel #2
0
        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();
        }
Beispiel #7
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));
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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));
        }