public async Task <IActionResult> PostComment(ColumnRespondViewModel viewModel) { await googleRecaptchaHelper.VerifyRecaptcha(Request, ModelState); var articleExists = columnRepo.ColumnPosts.Any(p => p.Id == viewModel.ColumnId); if (articleExists == false) { return(RedirectToAction("Column", "Error")); } if (ModelState.IsValid) { viewModel.Comment.DatePosted = DateTime.Now; if (string.IsNullOrEmpty(viewModel.Comment.Username)) { viewModel.Comment.Username = "******"; } viewModel.Comment.Text = viewModel.Comment.Text.Trim(); columnRepo.AddCommentToColumn(viewModel.Comment, viewModel.ColumnId); return(RedirectToAction("ColumnPost", "Column", new { id = viewModel.ColumnId })); } ViewBag.CommentPosted = true; return(ColumnPost(viewModel.ColumnId)); }
async void PostComment_InvalidModel_DisplaysColumnPost(string commentText, string commentUsername) { var articlesRepoMock = new Mock <IColumnRepository>(); articlesRepoMock.Setup(x => x.ColumnPosts).Returns(new ColumnPost[] { new ColumnPost { Id = 1 } }.AsQueryable); var columnController = new ColumnController(articlesRepoMock.Object, new RecaptchaMock()); var viewModel = new ColumnRespondViewModel { ColumnId = 1, Comment = new Comment { Text = commentText, Username = commentUsername } }; TestHelper.SimulateValidation(columnController, viewModel); TestHelper.SimulateValidation(columnController, viewModel.Comment); var result = (ViewResult)await columnController.PostComment(viewModel); Assert.Equal("ColumnPost", result.ViewName); articlesRepoMock.Verify(x => x.AddCommentToColumn(viewModel.Comment, viewModel.ColumnId), Times.Never); }
async void PostComment_TrimsText() { var columnRepoMock = new Mock <IColumnRepository>(); columnRepoMock.Setup(x => x.ColumnPosts).Returns(new ColumnPost[] { new ColumnPost { Id = 1 } }.AsQueryable); var columnController = new ColumnController(columnRepoMock.Object, new RecaptchaMock()); var viewModel = new ColumnRespondViewModel { ColumnId = 1, Comment = new Comment { Text = " test " } }; TestHelper.SimulateValidation(columnController, viewModel); var result = (RedirectToActionResult)await columnController.PostComment(viewModel); Assert.Equal("test", viewModel.Comment.Text); }
async void PostComment_ValidModel_CallsAddCommentToColumn() { var articlesRepoMock = new Mock <IColumnRepository>(); articlesRepoMock.Setup(x => x.ColumnPosts).Returns(new ColumnPost[] { new ColumnPost { Id = 1 } }.AsQueryable); var columnController = new ColumnController(articlesRepoMock.Object, new RecaptchaMock()); var viewModel = new ColumnRespondViewModel { ColumnId = 1, Comment = new Comment { Text = "" } }; TestHelper.SimulateValidation(columnController, viewModel); var result = (RedirectToActionResult)await columnController.PostComment(viewModel); articlesRepoMock.Verify(x => x.AddCommentToColumn(viewModel.Comment, viewModel.ColumnId), Times.Once); }
async void PostComment_InvalidColumnId_DisplaysErrorView() { var columnRepoMock = new Mock <IColumnRepository>(); columnRepoMock.Setup(x => x.ColumnPosts).Returns(new ColumnPost[] { new ColumnPost { Id = 1 } }.AsQueryable); var columnController = new ColumnController(columnRepoMock.Object, Mock.Of <IGoogleRecaptchaHelper>()); var viewModel = new ColumnRespondViewModel { ColumnId = 2, Comment = new Comment { Text = "" } }; TestHelper.SimulateValidation(columnController, viewModel); var result = (RedirectToActionResult)await columnController.PostComment(viewModel); Assert.Equal("Error", result.ControllerName); Assert.Equal("Column", result.ActionName); }
async void PostComment_ValidModel_RedirectsToColumnPost() { var articlesRepoMock = new Mock <IColumnRepository>(); articlesRepoMock.Setup(x => x.ColumnPosts).Returns(new ColumnPost[] { new ColumnPost { Id = 1 } }.AsQueryable); var columnController = new ColumnController(articlesRepoMock.Object, new RecaptchaMock()); var viewModel = new ColumnRespondViewModel { ColumnId = 1, Comment = new Comment { Text = "" } }; TestHelper.SimulateValidation(columnController, viewModel); var result = (RedirectToActionResult)await columnController.PostComment(viewModel); Assert.Equal("ColumnPost", result.ActionName); Assert.Equal("Column", result.ControllerName); }