Ejemplo n.º 1
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!this.ModelState.IsValid)
            {
                return(this.Page());
            }

            var isTopicExist = await this.mediator.Send(new IsArticleExistQuery(this.Article.Topic));

            if (isTopicExist)
            {
                this.ModelState.AddModelError($"{nameof(this.Article)}.{nameof(this.Article.Topic)}",
                                              $"The topic '{this.Article.Topic}' already exists.  Please choose another name!");

                this.logger.LogInformation($"The topic with name - {this.Article.Topic} exist.");

                return(this.Page());
            }

            var command = new CreateNewArticleCommand(
                this.Article.Topic,
                this.Article.Content,
                this.User.FindFirstValue(ClaimTypes.NameIdentifier));

            await this.mediator.Send(command);

            this.logger.LogInformation($"Create new article with topic name - {this.Article.Topic}");

            return(this.Redirect("./Index"));
        }
Ejemplo n.º 2
0
        public async Task TryToCreateArticle_ShouldReturnSuccessfulResult()
        {
            this.createNewArticleCommand = new CreateNewArticleCommand("test topic", "test content", Guid.NewGuid().ToString());

            var result = await this.createNewArticleCommandHandler
                         .Handle(this.createNewArticleCommand, CancellationToken.None);

            Assert.True(result.Successful, result.Exception?.Message);
        }
Ejemplo n.º 3
0
        public async Task ShouldCreateNewNonExistingArticleAndRedirect_GivenUserIsAuthenticated()
        {
            var expectedCommand = new CreateNewArticleCommand
            {
                Topic      = _topic,
                AuthorId   = userId,
                Content    = _content,
                AuthorName = username
            };

            _mediator.Setup(mediator => mediator.Send(It.IsAny <CreateNewArticleCommand>(), It.IsAny <CancellationToken>()))
            .Returns(() => Task.FromResult(new CommandResult {
                Successful = true, ObjectId = _expectedSlug
            }));

            _mediator.Setup(mediator => mediator.Send(It.IsAny <GetIsTopicAvailableQuery>(), It.IsAny <CancellationToken>()))
            .Returns(() => Task.FromResult(false));

            _mediator.Setup(mediator => mediator.Send(It.IsAny <GetArticlesToCreateFromArticleQuery>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult((_expectedSlug, new string[] { })));

            _sut = new CreateModel(_mediator.Object, _mapper, new NullLoggerFactory())
            {
                Article = new ArticleCreate
                {
                    Topic   = _topic,
                    Content = _content
                }
            };

            //we depend on a valid ClaimsPrinciple!! No check on User yet before sending the command
            _sut.AddPageContext(username, userId);
            var result = await _sut.OnPostAsync();

            Assert.IsType <RedirectToPageResult>(result);
            Assert.Equal(_expectedSlug, ((RedirectToPageResult)result).RouteValues["slug"]);
            _mediator.Verify(m => m.Send(
                                 It.Is <GetIsTopicAvailableQuery>(request =>
                                                                  request.ArticleId.Equals(0) &&
                                                                  request.Topic.Equals(_topic)),
                                 It.Is <CancellationToken>(token => token.Equals(CancellationToken.None))), Times.Once
                             );
            _mediator.Verify(m => m.Send(
                                 It.Is <CreateNewArticleCommand>(request =>
                                                                 request.Topic.Equals(expectedCommand.Topic) &&
                                                                 request.AuthorName.Equals(expectedCommand.AuthorName) &&
                                                                 request.Content.Equals(expectedCommand.Content) &&
                                                                 request.AuthorId.Equals(userId)),
                                 It.Is <CancellationToken>(token => token.Equals(CancellationToken.None))), Times.Once);
        }
        public CreateNewArticleCommandHandlerTests()
        {
            _mapper  = Mock.Of <IMapper>();
            _article = new Article()
            {
                Id = 1
            };

            var mockService = new Mock <IArticleManagementService>();

            mockService.Setup(s => s.CreateArticleAndHistory(It.IsAny <Article>())).Returns(Task.FromResult(_article)).Verifiable();
            _articleManagementService = mockService.Object;

            _createNewArticleCommandHandler = new CreateNewArticleCommandHandler(_articleManagementService, _mapper);

            _createNewArticleCommand = new CreateNewArticleCommand();

            Mock.Get(_mapper).Setup(m => m.Map <Article>(_createNewArticleCommand)).Returns(_article);
        }