public IActionResult Create(PublishArticleFormViewModel model)
        {
            var userId = this.userManager.GetUserId(this.User);

            if (userId == null)
            {
                TempData.AddErrorMessage("The author does not exist.");
                return(View());
            }

            var sanitizedContent = this.htmlService.Sanitize(model.Content);

            try
            {
                this.articleService.Create(model.Title, sanitizedContent, userId);
            }
            catch (InvalidOperationException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }

            TempData.AddSuccessMessage("Successfully published.");

            return(RedirectToAction(nameof(Index)));
        }
        public void CreateArticlesViewShouldPassed()
        {
            // Arrange
            var    articleService = new Mock <IArticleService>().Object;
            var    htmlService    = new Mock <IHtmlService>().Object;
            var    userManager    = this.GetUserManagerMock().Object;
            string successMsg     = null;

            var tempData = new Mock <ITempDataDictionary>();

            tempData.SetupSet(t => t[TempDataSuccessMessageKey]  = It.IsAny <string>())
            .Callback((string key, object message) => successMsg = message as string);     // mock indexer

            var controller = new ArticlesController(articleService, userManager, htmlService)
            {
                TempData = tempData.Object
            };

            var publishArticleFormViewModel = new PublishArticleFormViewModel()
            {
                Title   = ArticleTitle,
                Content = ArticleContent
            };

            // Act
            var resultCreateGet  = controller.Create() as ViewResult;
            var resultCreatePost = controller.Create(publishArticleFormViewModel);

            // Assert
            resultCreateGet
            .Should()
            .NotBeNull();

            resultCreatePost.Should().BeOfType <RedirectToActionResult>();
            resultCreatePost.As <RedirectToActionResult>().ActionName.Should().Be(nameof(ArticlesController.Index));

            successMsg
            .Should()
            .Be(SuccessPublishedArticle);
        }