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")); }
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); }
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); }