Пример #1
0
        public async Task <IActionResult> OnGetAsync(string slug = "")
        {
            if (string.IsNullOrEmpty(slug))
            {
                return(Page());
            }

            var request = new GetArticleQuery(slug);
            var result  = await _mediator.Send(request);

            if (result == null)
            {
                Article = new ArticleCreate
                {
                    Topic = UrlHelpers.SlugToTopic(slug)
                };
            }
            else
            {
                // TODO: Convert this to use a PageRoute
                return(Redirect($"/{slug}/Edit"));
            }

            return(Page());
        }
Пример #2
0
        public async Task <ResultWrapper <GetArticleOutput> > Handle(GetArticleQuery request, CancellationToken cancellationToken)
        {
            ResultWrapper <GetArticleOutput> result = new ResultWrapper <GetArticleOutput>();

            var tData = await _dbContext.TArticle
                        .Include(x => x.TArticleSports)
                        .ThenInclude(x => x.TSport)
                        .FirstOrDefaultAsync(x => x.Id == request.Id);

            result.Status = true;
            result.Result = new GetArticleOutput()
            {
                Id      = tData.Id,
                Title   = tData.Title,
                Summary = tData.Summary,
                Image   = tData.Image,
                Enabled = tData.Enabled,
                Content = tData.Content,
                Sports  = tData.TArticleSports
                          .Select(x => new PublicListItem()
                {
                    Enabled  = x.TSport.Enabled,
                    Image    = x.TSport.Image,
                    Selected = false,
                    Text     = x.TSport.Title,
                    Value    = x.TSportId.ToString()
                }).ToList()
            };

            return(result);
        }
        public async Task GetArticleQueryHandlerTest_Fail_When_Id_Doe_Not_Exist()
        {
            var sut = new GetArticleQueryHandler(db);

            var getArticleQuery = new GetArticleQuery(nonExistingArticleId);

            var result = await sut.Handle(getArticleQuery, CancellationToken.None);

            Assert.Null(result);
        }
Пример #4
0
        public async Task <IActionResult> GetArticle([FromRoute] GetArticleQuery query)
        {
            var result = await _mediator.Send(query);

            if (result.ErrorOccurred)
            {
                return(BadRequest(result));
            }

            return(Ok(result));
        }
Пример #5
0
        public IHttpActionResult GetArticle(string id)
        {
            var query = new GetArticleQuery
            {
                Id = id
            };

            var dto = _queryBus.Send <GetArticleQuery, ArticleDto>(query);

            return(Ok(dto));
        }
        public async Task GetArticleQueryHandlerTest_Succes()
        {
            var sut = new GetArticleQueryHandler(db);

            var getArticleQuery = new GetArticleQuery(firstArticleId);

            var result = await sut.Handle(getArticleQuery, CancellationToken.None);

            Assert.IsType <ArticleLookupModel>(result);
            Assert.NotNull(result);
            Assert.Equal("Article 1", result.Title);
        }
        public async Task And_The_Api_Is_Called_With_Invalid_Request_Parameters_Then_No_Article_Is_Returned(
            GetArticleQuery query, [Frozen] Mock<IApiClient> client, [Frozen] Mock<IOptions<CampaignConfiguration>> config, GetArticleQueryHandler handler)
        {
            SetupMockConfig(config);
            client.Setup(o => o.Get<Page<Article>>(It.Is<GetArticlesPreviewRequest>(r => r.GetUrl == $"article/preview/{query.Hub}/{query.Slug}"))).ReturnsAsync((Page<Article>)null);
            client.Setup(o => o.Get<Page<Article>>(It.Is<GetArticlesRequest>(r => r.GetUrl == $"article/{query.Hub}/{query.Slug}"))).ReturnsAsync((Page<Article>)null);
            client.Setup(o => o.Get<Page<Menu>>(It.Is<GetMenuRequest>(r => r.GetUrl == $"menu"))).ReturnsAsync((Page<Menu>)null);

            var actual = await handler.Handle(query, CancellationToken.None);

            actual.Should().NotBeNull();
            actual.Page.Should().BeNull();
        }
        public async Task Then_The_Api_Is_Called_With_The_Valid_Request_Parameters_And_The_Article_Is_Returned_From_The_Preview_Api_if_Config_And_Param_Set(
            GetArticleQuery query, Page<Article> response, [Frozen] Mock<IOptions<CampaignConfiguration>> config, [Frozen] Mock<IApiClient> client, GetArticleQueryHandler handler)
        {
            SetupMockConfig(config);
            query.Preview = true;
            client.Setup(o => o.Get<Page<Article>>(It.Is<GetArticlesPreviewRequest>(r => r.GetUrl == $"article/preview/{query.Hub}/{query.Slug}"))).ReturnsAsync(response);

            var actual = await handler.Handle(query, CancellationToken.None);

            client.Verify(o => o.Get<Page<Article>>(It.Is<GetArticlesPreviewRequest>(r => r.GetUrl == $"article/preview/{query.Hub}/{query.Slug}")), Times.Once);
            actual.Should().NotBeNull();
            actual.Page.Should().NotBeNull();
        }
Пример #9
0
        public async Task <IActionResult> GetArticles(int id)
        {
            FirebaseUser    user  = HttpContext.GetFirebaseUser();
            GetArticleQuery model = new GetArticleQuery()
            {
                firebaseId = user.UserId,
                Id         = id
            };
            ResultWrapper <GetArticleOutput> result = new ResultWrapper <GetArticleOutput>();

            result = await _mediator.Send(model);

            return(Ok(result));
        }
        public async Task GivenValidRequest_WhenTheArticleDoesNotExist_ThrowsApiExpection()
        {
            // Arrange
            var getArticleQuery = new GetArticleQuery("an-article-does-not-exist");

            // Act
            var handler   = new GetArticleQueryHandler(Context, Mapper);
            var exception = await Should.ThrowAsync <ConduitApiException>(async() =>
            {
                await handler.Handle(getArticleQuery, CancellationToken.None);
            });

            // Assert
            exception.StatusCode.ShouldBe(HttpStatusCode.NotFound);
        }
        public async Task GivenValidRequest_WhenTheArticleExists_ReturnsArticleViewModel()
        {
            // Arrange
            var getArticleQuery = new GetArticleQuery("how-to-train-your-dragon");

            // Act
            var handler  = new GetArticleQueryHandler(Context, Mapper);
            var response = await handler.Handle(getArticleQuery, CancellationToken.None);

            // Assert
            response.ShouldNotBeNull();
            response.ShouldBeOfType <ArticleViewModel>();
            response.Article.ShouldNotBeNull();
            response.Article.ShouldBeOfType <ArticleDto>();
            response.Article.Author.Username.ShouldBe("joey.mckenzie");
            response.Article.TagList.ShouldNotBeEmpty();
            response.Article.TagList.ShouldContain("dragons");
        }
Пример #12
0
        public async Task UpdateArticleSuccessTest()
        {
            var queryHandler    = new GetArticleQueryHandler(db);
            var getArticleQuery = new GetArticleQuery(firstArticleId);
            var article         = await queryHandler.Handle(getArticleQuery, CancellationToken.None);

            db = new AppDatabaseContext(options);

            var sut = new UpdateArticleCommandHandler(db);
            var updatedArticleCommand = new UpdateArticleCommand
            {
                Id    = firstArticleId,
                Title = "Updated Article Title"
            };

            var result = await sut.Handle(updatedArticleCommand, CancellationToken.None);

            var updatedArticle = queryHandler.Handle(getArticleQuery, CancellationToken.None);

            Assert.IsType <Unit>(result);
            Assert.NotNull(updatedArticle);
        }
        public async Task Then_The_Api_Is_Called_With_The_Valid_Request_Parameters_Then_The_Article_Is_Returned_From_The_Api_With_The_Menu(
            bool preview, GetArticleQuery query, Page<Article> response, [Frozen] Mock<IApiClient> client, [Frozen] Mock<IOptions<CampaignConfiguration>> config, GetArticleQueryHandler handler)
        {
            query.Preview = preview;
            SetupMockConfig(config, false);

            client.Setup(o => o.Get<Page<Article>>(It.Is<GetArticlesRequest>(r => r.GetUrl == $"article/{query.Hub}/{query.Slug}"))).ReturnsAsync(response);

            var actual = await handler.Handle(query, CancellationToken.None);

            client.Verify(
                o => o.Get<Page<Article>>(It.Is<GetArticlesRequest>(r => r.GetUrl == $"article/{query.Hub}/{query.Slug}")), Times.Once);

            client.Verify(o => o.Get<Page<Article>>(It.IsAny<GetArticlesPreviewRequest>()), Times.Never);
            actual.Should().NotBeNull();
            actual.Page.Should().NotBeNull();
            actual.Page.Content.Should().NotBeNull();
            actual.Page.Menu.Should().NotBeNull();
            actual.Page.Menu.Apprentices.Should().NotBeNullOrEmpty();
            actual.Page.Menu.Influencers.Should().NotBeNullOrEmpty();
            actual.Page.Menu.TopLevel.Should().NotBeNullOrEmpty();
            actual.Page.Menu.Employers.Should().NotBeNullOrEmpty();
        }
        public async Task <IViewComponentResult> InvokeAsync(GetCommentModel commentModel)
        {
            // TODO: test with deleted boards
            var getBoardQuery = new GetBoardQuery(commentModel.BoardId);
            var board         = await getBoardQuery.DefaultIfExceptionAsync(_mediator);

            var             getArticleQuery = new GetArticleQuery(commentModel.ParentArticleId);
            GetArticleModel parentArticle   = await getArticleQuery.DefaultIfExceptionAsync(_mediator);

            var             getCommentQuery = new GetCommentQuery(commentModel.ParentCommentId);
            GetCommentModel parentComment   = await getCommentQuery.DefaultIfExceptionAsync(_mediator);

            // TODO: will most likely return null when user is deleted
            var getUserQuery        = new GetPublicUserQuery(commentModel.UserId);
            GetPublicUserModel user = await getUserQuery.DefaultIfExceptionAsync(_mediator);


            string jwt = _apiJwtManager.GetToken();

            bool loggedIn           = false;
            bool saved              = false;
            bool userUpvoted        = false;
            bool userDownvoted      = false;
            bool userCreatedComment = false;

            try
            {
                var loggedInUser = await _mediator.Send(new GetAuthenticatedUserQuery());

                if (loggedInUser != null)
                {
                    loggedIn = true;
                }
                saved              = loggedInUser.SavedComments.Any(commentId => commentId == commentModel.Id);
                userUpvoted        = loggedInUser.LikedComments.Any(commentId => commentId == commentModel.Id);
                userDownvoted      = loggedInUser.DislikedComments.Any(commentId => commentId == commentModel.Id);
                userCreatedComment = commentModel.UserId == loggedInUser.Id;
            }
            catch (System.Exception)
            {
                loggedIn = false;
            }


            var model = new CommentCardViewModel
            {
                Comment            = commentModel,
                Board              = board,
                ParentArticle      = parentArticle,
                ParentComment      = parentComment,
                User               = user,
                Jwt                = jwt,
                LoggedIn           = loggedIn,
                Saved              = saved,
                UserUpvoted        = userUpvoted,
                UserDownvoted      = userDownvoted,
                UserCreatedComment = userCreatedComment
            };

            return(View(model));
        }