public async Task <IActionResult> Add(ArticleCreationBindingModel model)
        {
            var article = await this.articlesService.AddArticleAsync(model);

            SetSuccesfullMessage(AddedSuccessfully, ArticleConst);

            return(this.RedirectToAction("Details", new { id = article.Id, slug = article.Slug }));
        }
        public async Task <Article> AddArticleAsync(ArticleCreationBindingModel model)
        {
            Validator.EnsureNotNull(model, ValidationConstants.ArticleDefinedMessage);
            Validator.EnsureStringNotNullOrEmpty(model.Title, ValidationConstants.ArticleTitleMessage);
            Validator.EnsureStringNotNullOrEmpty(model.Slug, ValidationConstants.ArticleSlugMessage);
            Validator.EnsureStringNotNullOrEmpty(model.Content, ValidationConstants.ArticleContentMessage);
            Validator.EnsureStringNotNullOrEmpty(model.PublishDateTime.ToString(), ValidationConstants.ArticleDateMessage);
            Validator.EnsureStringNotNullOrEmpty(model.AuthorId, ValidationConstants.ArticleAuthorMessage);
            Validator.EnsureStringNotNullOrEmpty(model.ArticleCategoryId.ToString(), ValidationConstants.ArticleCategoryMessage);

            var article = this.Mapper.Map <Article>(model);

            await this.DbContext.Articles.AddAsync(article);

            await this.DbContext.SaveChangesAsync();

            return(article);
        }
        public void Add_WithValidArticle_ShouldCallService()
        {
            // Arrange
            var  model          = new ArticleCreationBindingModel();
            bool serviceCalled  = false;
            var  mockRepository = new Mock <IAdminArticlesService>();

            mockRepository.Setup(repo => repo.AddArticleAsync(model))
            .Callback(() => serviceCalled = true);

            var userRepository = new Mock <IAdminUsersService>();

            userRepository.Setup(repo => repo.GetAuthorsAsync())
            .Callback(() => serviceCalled = true);

            var controller = new ArticlesController(userRepository.Object, mockRepository.Object);

            // Act
            var result = controller.Add(model);

            // Assert
            Assert.IsTrue(serviceCalled);
        }